update to PHP-8.1
[m6w6/seekat] / lib / API / Future / Amp2.php
1 <?php
2
3 namespace seekat\API\Future;
4
5 use Amp;
6 use seekat\API\Future;
7 use function seekat\Exception\exception;
8
9 final class Amp2 extends Common implements Future {
10 protected string $promiseType = Amp\Promise::class;
11
12 function createContext(callable $onCancel = null) : Amp\Deferred {
13 $context = new Amp\Deferred();
14 if (isset($onCancel)) {
15 $this->cancellations[$context->promise()] = $onCancel;
16 }
17 return $context;
18 }
19
20 function handlePromise(object $promise, callable $onResult = null, callable $onError = null) : Amp\Promise {
21 $promise->onResolve(function($error = null, $result = null) use($onResult, $onError) {
22 if ($error) {
23 if ($onError) {
24 $onError($error);
25 }
26 } else {
27 if ($onResult) {
28 $onResult($result);
29 }
30 }
31 });
32 return $promise;
33 }
34
35 function reject(mixed $reason) : object {
36 $this->createContext()->fail(\seekat\Exception\exception($reason));
37 }
38
39 function rejecter(object $context) : \Closure {
40 return function($reason) use($context) {
41 $context->fail(exception($reason));
42 };
43 }
44
45 /**
46 * @param array<Amp\Promise> $promises
47 */
48 function all(array $promises) : Amp\Promise {
49 return Amp\Promise\all($promises);
50 }
51 }