1<?php 2 3namespace GuzzleHttp\Promise; 4 5final class Create 6{ 7 /** 8 * Creates a promise for a value if the value is not a promise. 9 * 10 * @param mixed $value Promise or value. 11 * 12 * @return PromiseInterface 13 */ 14 public static function promiseFor($value) 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 return $promise; 27 } 28 29 return new FulfilledPromise($value); 30 } 31 32 /** 33 * Creates a rejected promise for a reason if the reason is not a promise. 34 * If the provided reason is a promise, then it is returned as-is. 35 * 36 * @param mixed $reason Promise or reason. 37 * 38 * @return PromiseInterface 39 */ 40 public static function rejectionFor($reason) 41 { 42 if ($reason instanceof PromiseInterface) { 43 return $reason; 44 } 45 46 return new RejectedPromise($reason); 47 } 48 49 /** 50 * Create an exception for a rejected promise value. 51 * 52 * @param mixed $reason 53 * 54 * @return \Exception|\Throwable 55 */ 56 public static function exceptionFor($reason) 57 { 58 if ($reason instanceof \Exception || $reason instanceof \Throwable) { 59 return $reason; 60 } 61 62 return new RejectionException($reason); 63 } 64 65 /** 66 * Returns an iterator for the given value. 67 * 68 * @param mixed $value 69 * 70 * @return \Iterator 71 */ 72 public static function iterFor($value) 73 { 74 if ($value instanceof \Iterator) { 75 return $value; 76 } 77 78 if (is_array($value)) { 79 return new \ArrayIterator($value); 80 } 81 82 return new \ArrayIterator([$value]); 83 } 84} 85