1<?php 2 3declare(strict_types=1); 4 5namespace GuzzleHttp\Promise; 6 7final class Create 8{ 9 /** 10 * Creates a promise for a value if the value is not a promise. 11 * 12 * @param mixed $value Promise or value. 13 */ 14 public static function promiseFor($value): PromiseInterface 15 { 16 if ($value instanceof PromiseInterface) { 17 return $value; 18 } 19 20 // Return a Guzzle promise that shadows the given promise. 21 if (is_object($value) && method_exists($value, 'then')) { 22 $wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null; 23 $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null; 24 $promise = new Promise($wfn, $cfn); 25 $value->then([$promise, 'resolve'], [$promise, 'reject']); 26 27 return $promise; 28 } 29 30 return new FulfilledPromise($value); 31 } 32 33 /** 34 * Creates a rejected promise for a reason if the reason is not a promise. 35 * If the provided reason is a promise, then it is returned as-is. 36 * 37 * @param mixed $reason Promise or reason. 38 */ 39 public static function rejectionFor($reason): PromiseInterface 40 { 41 if ($reason instanceof PromiseInterface) { 42 return $reason; 43 } 44 45 return new RejectedPromise($reason); 46 } 47 48 /** 49 * Create an exception for a rejected promise value. 50 * 51 * @param mixed $reason 52 */ 53 public static function exceptionFor($reason): \Throwable 54 { 55 if ($reason instanceof \Throwable) { 56 return $reason; 57 } 58 59 return new RejectionException($reason); 60 } 61 62 /** 63 * Returns an iterator for the given value. 64 * 65 * @param mixed $value 66 */ 67 public static function iterFor($value): \Iterator 68 { 69 if ($value instanceof \Iterator) { 70 return $value; 71 } 72 73 if (is_array($value)) { 74 return new \ArrayIterator($value); 75 } 76 77 return new \ArrayIterator([$value]); 78 } 79} 80