1<?php
2
3declare(strict_types=1);
4
5namespace GuzzleHttp\Promise;
6
7/**
8 * A special exception that is thrown when waiting on a rejected promise.
9 *
10 * The reason value is available via the getReason() method.
11 */
12class RejectionException extends \RuntimeException
13{
14    /** @var mixed Rejection reason. */
15    private $reason;
16
17    /**
18     * @param mixed       $reason      Rejection reason.
19     * @param string|null $description Optional description.
20     */
21    public function __construct($reason, string $description = null)
22    {
23        $this->reason = $reason;
24
25        $message = 'The promise was rejected';
26
27        if ($description) {
28            $message .= ' with reason: '.$description;
29        } elseif (is_string($reason)
30            || (is_object($reason) && method_exists($reason, '__toString'))
31        ) {
32            $message .= ' with reason: '.$this->reason;
33        } elseif ($reason instanceof \JsonSerializable) {
34            $message .= ' with reason: '.json_encode($this->reason, JSON_PRETTY_PRINT);
35        }
36
37        parent::__construct($message);
38    }
39
40    /**
41     * Returns the rejection reason.
42     *
43     * @return mixed
44     */
45    public function getReason()
46    {
47        return $this->reason;
48    }
49}
50