update to PHP-8.1
[m6w6/seekat] / lib / API / Future / React2.php
diff --git a/lib/API/Future/React2.php b/lib/API/Future/React2.php
new file mode 100644 (file)
index 0000000..6cd27a3
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+
+namespace seekat\API\Future;
+
+use seekat\API\Future;
+use React;
+
+final class React2 extends Common implements Future {
+       protected string $promiseType = React\Promise\Promise::class;
+
+       function createContext(callable $onCancel = null) : React\Promise\PromisorInterface {
+               $context = new React\Promise\Deferred($onCancel);
+               if (isset($onCancel)) {
+                       $this->cancellations[$context->promise()] = $context->promise()->cancel(...);
+               }
+               return $context;
+       }
+
+       function handlePromise(object $promise, callable $onResult = null, callable $onError = null) : React\Promise\PromiseInterface {
+               return $promise->then($onResult, $onError);
+       }
+
+       function reject(mixed $reason) : object {
+               $context = $this->createContext();
+               $context->reject($reason);
+               return $context->promise();
+       }
+
+       function rejecter(object $context) : \Closure {
+               return function($reason) use($context) {
+                       $context->reject($reason);
+               };
+       }
+
+       /**
+        * @param array<React\Promise\PromiseInterface> $promises
+        * @return React\Promise\PromiseInterface
+        */
+       function all(array $promises) : React\Promise\PromiseInterface {
+               return React\Promise\all($promises);
+       }
+}