drop async-interop
[m6w6/seekat] / lib / API / Future / functions.php
index 34d38c5adbe78d55c59b9c3a223f8cea11017aa0..b9559128da8d7df09be7df6a9a12cc4757cbedec 100644 (file)
@@ -3,30 +3,30 @@
 namespace seekat\API\Future;
 
 use Amp\Deferred as AmpDeferred;
-use AsyncInterop\Promise;
-use Icicle\Awaitable\Deferred as IcicleDeferred;
+use Amp\Promise as AmpPromise;
 use React\Promise\Deferred as ReactDeferred;
+use React\Promise\PromiseInterface as ReactPromise;
 use seekat\API\Future;
 
 /**
  * @param Future $future
  * @param mixed $value
- * @return Promise
+ * @return mixed promise
  */
 function resolve(Future $future, $value) {
        $promisor = $future->createContext();
-       $future->onSuccess($promisor, $value);
+       $future->resolve($promisor, $value);
        return $future->getPromise($promisor);
 }
 
 /**
  * @param Future $future
  * @param mixed $reason
- * @return Promise
+ * @return mixed promise
  */
 function reject(Future $future, $reason) {
        $promisor = $future->createContext();
-       $future->onFailure($promisor, $reason);
+       $future->reject($promisor, $reason);
        return $future->getPromise($promisor);
 }
 
@@ -37,7 +37,7 @@ function reject(Future $future, $reason) {
  */
 function resolver(Future $future, $context) {
        return function($value) use($future, $context) {
-               return $future->onSuccess($context, $value);
+               return $future->resolve($context, $value);
        };
 }
 
@@ -48,7 +48,7 @@ function resolver(Future $future, $context) {
  */
 function rejecter(Future $future, $context) {
        return function($reason) use($future, $context) {
-               return $future->onFailure($context, $reason);
+               return $future->reject($context, $reason);
        };
 }
 
@@ -57,9 +57,9 @@ function rejecter(Future $future, $context) {
  * @param mixed $context Promisor
  * @return \Closure
  */
-function updater(Future $future, $context) {
-       return function($update) use($future, $context) {
-               return $future->onUpdate($context, $update);
+function reducer(Future $future, $context) {
+       return function(array $promises) use($future, $context) {
+               return $future->all($context, $promises);
        };
 }
 
@@ -76,24 +76,37 @@ function react() {
                        return new ReactDeferred($onCancel);
                }
 
-               function getPromise($context) : Promise {
+               function getPromise($context) {
                        /* @var $context ReactDeferred */
                        return $context->promise();
                }
 
-               function onSuccess($context, $value) {
+               function isPromise($promise) : bool {
+                       return $promise instanceof ReactPromise;
+               }
+
+               function handlePromise($promise, callable $onResult = null, callable $onError = null) {
+                       return $promise->then($onResult, $onError);
+               }
+
+               function cancelPromise($promise) : bool {
+                       /* @var $promise \React\Promise\Promise */
+                       $promise->cancel();
+                       return true;
+               }
+
+               function resolve($context, $value) {
                        /* @var $context ReactDeferred */
                        $context->resolve($value);
                }
 
-               function onFailure($context, $reason) {
+               function reject($context, $reason) {
                        /* @var $context ReactDeferred */
                        $context->reject($reason);
                }
 
-               function onUpdate($context, $update) {
-                       /* @var $context ReactDeferred */
-                       $context->notify($update);
+               function all($context, array $promises) {
+                       return \React\Promise\all($promises);
                }
        };
 }
@@ -110,59 +123,46 @@ function amp() {
                        return new AmpDeferred();
                }
 
-               function getPromise($context) : Promise {
+               function getPromise($context) {
                        /* @var $context AmpDeferred */
                        return $context->promise();
                }
 
-               function onSuccess($context, $value) {
-                       /* @var $context AmpDeferred */
-                       $context->resolve($value);
-               }
-
-               function onFailure($context, $reason) {
-                       /* @var $context AmpDeferred */
-                       $context->fail($reason);
-               }
-
-               function onUpdate($context, $update) {
-                       /* @var $context AmpDeferred */
-                       /* noop */
+               function isPromise($promise) : bool {
+                       return $promise instanceof AmpPromise;
                }
-       };
-}
 
-/**
- * @return Future
- */
-function icicle() {
-       return new class implements Future {
-               /**
-                * @param callable|null $onCancel
-                * @return IcicleDeferred
-                */
-               function createContext(callable $onCancel = null) {
-                       return new IcicleDeferred($onCancel);
+               function handlePromise($promise, callable $onResult = null, callable $onError = null) {
+                       $promise->onResolve(function($error = null, $result = null) use($onResult, $onError) {
+                               if ($error) {
+                                       if ($onError) {
+                                               $onError($error);
+                                       }
+                               } else {
+                                       if ($onResult) {
+                                               $onResult($result);
+                                       }
+                               }
+                       });
+                       return $promise;
                }
 
-               function getPromise($context): Promise {
-                       /* @var $context IcicleDeferred */
-                       return $context->getPromise();
+               function cancelPromise($promise) : bool {
+                       return false;
                }
 
-               function onSuccess($context, $value) {
-                       /* @var $context IcicleDeferred */
+               function resolve($context, $value) {
+                       /* @var $context AmpDeferred */
                        $context->resolve($value);
                }
 
-               function onFailure($context, $reason) {
-                       /* @var $context IcicleDeferred */
-                       $context->reject($reason);
+               function reject($context, $reason) {
+                       /* @var $context AmpDeferred */
+                       $context->fail(\seekat\Exception\exception($reason));
                }
 
-               function onUpdate($context, $update) {
-                       /* @var $context IcicleDeferred */
-                       /* noop */
+               function all($context, array $promises) {
+                       return \Amp\all($promises);
                }
        };
 }