summaryrefslogtreecommitdiffstats
path: root/lib/SparkPost/SparkPostPromise.php
blob: df715d5d173e09df24626ea8f2fad4399a033512 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php

namespace SparkPost;

use Http\Promise\Promise as HttpPromise;

class SparkPostPromise implements HttpPromise
{
    /**
     * HttpPromise to be wrapped by SparkPostPromise.
     */
    private $promise;

    /**
     * set the promise to be wrapped.
     *
     * @param HttpPromise $promise
     */
    public function __construct(HttpPromise $promise)
    {
        $this->promise = $promise;
    }

    /**
     * Hand off the response functions to the original promise and return a custom response or exception.
     *
     * @param callable $onFulfilled - function to be called if the promise is fulfilled
     * @param callable $onRejected  - function to be called if the promise is rejected
     */
    public function then(callable $onFulfilled = null, callable $onRejected = null)
    {
        return $this->promise->then(function ($response) use ($onFulfilled) {
            if (isset($onFulfilled)) {
                $onFulfilled(new SparkPostResponse($response));
            }
        }, function ($exception) use ($onRejected) {
            if (isset($onRejected)) {
                $onRejected(new SparkPostException($exception));
            }
        });
    }

    /**
     * Hand back the state.
     *
     * @return $state - returns the state of the promise
     */
    public function getState()
    {
        return $this->promise->getState();
    }

    /**
     * Wraps the wait function and returns a custom response or throws a custom exception.
     *
     * @param bool $unwrap
     *
     * @return SparkPostResponse
     *
     * @throws SparkPostException
     */
    public function wait($unwrap = true)
    {
        try {
            $response = $this->promise->wait($unwrap);

            return $response ? new SparkPostResponse($response) : $response;
        } catch (\Exception $exception) {
            throw new SparkPostException($exception);
        }
    }
}