3 namespace seekat\API\Future
;
5 use Amp\Deferred
as AmpDeferred
;
6 use AsyncInterop\Promise
;
7 use Icicle\Awaitable\Deferred
as IcicleDeferred
;
8 use React\Promise\Deferred
as ReactDeferred
;
12 * @param Future $future
16 function resolve(Future
$future, $value) {
17 $promisor = $future->createContext();
18 $future->onSuccess($promisor, $value);
19 return $future->getPromise($promisor);
23 * @param Future $future
24 * @param mixed $reason
27 function reject(Future
$future, $reason) {
28 $promisor = $future->createContext();
29 $future->onFailure($promisor, $reason);
30 return $future->getPromise($promisor);
34 * @param Future $future
35 * @param mixed $context Promisor
38 function resolver(Future
$future, $context) {
39 return function($value) use($future, $context) {
40 return $future->onSuccess($context, $value);
45 * @param Future $future
46 * @param mixed $context Promisor
49 function rejecter(Future
$future, $context) {
50 return function($reason) use($future, $context) {
51 return $future->onFailure($context, $reason);
56 * @param Future $future
57 * @param mixed $context Promisor
60 function updater(Future
$future, $context) {
61 return function($update) use($future, $context) {
62 return $future->onUpdate($context, $update);
70 return new class implements Future
{
72 * @param callable|null $onCancel
73 * @return ReactDeferred
75 function createContext(callable
$onCancel = null) {
76 return new ReactDeferred($onCancel);
79 function getPromise($context) : Promise
{
80 /* @var $context ReactDeferred */
81 return $context->promise();
84 function onSuccess($context, $value) {
85 /* @var $context ReactDeferred */
86 $context->resolve($value);
89 function onFailure($context, $reason) {
90 /* @var $context ReactDeferred */
91 $context->reject($reason);
94 function onUpdate($context, $update) {
95 /* @var $context ReactDeferred */
96 $context->notify($update);
105 return new class implements Future
{
107 * @return AmpDeferred
109 function createContext(callable
$onCancel = null) {
110 return new AmpDeferred();
113 function getPromise($context) : Promise
{
114 /* @var $context AmpDeferred */
115 return $context->promise();
118 function onSuccess($context, $value) {
119 /* @var $context AmpDeferred */
120 $context->resolve($value);
123 function onFailure($context, $reason) {
124 /* @var $context AmpDeferred */
125 $context->fail($reason);
128 function onUpdate($context, $update) {
129 /* @var $context AmpDeferred */
139 return new class implements Future
{
141 * @param callable|null $onCancel
142 * @return IcicleDeferred
144 function createContext(callable
$onCancel = null) {
145 return new IcicleDeferred($onCancel);
148 function getPromise($context): Promise
{
149 /* @var $context IcicleDeferred */
150 return $context->getPromise();
153 function onSuccess($context, $value) {
154 /* @var $context IcicleDeferred */
155 $context->resolve($value);
158 function onFailure($context, $reason) {
159 /* @var $context IcicleDeferred */
160 $context->reject($reason);
163 function onUpdate($context, $update) {
164 /* @var $context IcicleDeferred */