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