GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( dd4a42...344805 )
by Cees-Jan
06:54
created

ClosureChild   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 3
dl 0
loc 51
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 13 1
A create() 0 4 1
A executeClosure() 0 10 2
1
<?php declare(strict_types=1);
2
3
namespace WyriHaximus\React\ChildProcess\Closure;
4
5
use React\EventLoop\LoopInterface;
6
use React\Promise\PromiseInterface;
7
use SuperClosure\Serializer;
8
use Throwable;
9
use WyriHaximus\React\ChildProcess\Messenger\ChildInterface;
10
use WyriHaximus\React\ChildProcess\Messenger\Messages\Payload;
11
use WyriHaximus\React\ChildProcess\Messenger\Messenger;
12
use function React\Promise\reject;
13
use function React\Promise\resolve;
14
15
final class ClosureChild implements ChildInterface
16
{
17
    /**
18
     * @var Messenger
19
     */
20
    private $messenger;
21
22
    /**
23
     * @var LoopInterface
24
     */
25
    private $loop;
26
27
    /**
28
     * @var Serializer
29
     */
30
    private $serializer;
31
32
    /**
33
     * @param Messenger     $messenger
34
     * @param LoopInterface $loop
35
     */
36
    private function __construct(Messenger $messenger, LoopInterface $loop)
37
    {
38
        $this->messenger = $messenger;
39
        $this->loop = $loop;
40
        $this->serializer = new Serializer();
41
42
        $this->messenger->registerRpc(
43
            MessageFactory::CLOSURE_EXECUTE,
44
            function (Payload $payload) {
45
                return $this->executeClosure($payload->getPayload()['closure']);
46
            }
47
        );
48
    }
49
50
    public static function create(Messenger $messenger, LoopInterface $loop)
51
    {
52
        return new self($messenger, $loop);
53
    }
54
55
    private function executeClosure(string $closure): PromiseInterface
56
    {
57
        try {
58
            $unserialized = $this->serializer->unserialize($closure);
59
60
            return resolve($unserialized());
61
        } catch (Throwable $throwable) {
62
            return reject($throwable);
63
        }
64
    }
65
}
66