24 lines
		
	
	
		
			709 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			24 lines
		
	
	
		
			709 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\mapper\base;
 | |
| 
 | |
| use nur\b\ValueException;
 | |
| use nur\func;
 | |
| use Traversable;
 | |
| 
 | |
| class producer_utils {
 | |
|   static function ensure_producer($producer, ?array $args=null): iterable {
 | |
|     if (is_array($producer) &&
 | |
|       array_key_exists(0, $producer) &&
 | |
|       is_subclass_of($producer[0], Producer::class)) {
 | |
|       $producer = array_merge($producer, $args);
 | |
|       return func::cons(...$producer);
 | |
|     }
 | |
|     if (is_iterable($producer)) return $producer;
 | |
|     if (is_string($producer) && is_subclass_of($producer, Traversable::class)) {
 | |
|       if ($args === null) $args = [];
 | |
|       return func::cons($producer, ...$args);
 | |
|     }
 | |
|     throw ValueException::unexpected_type(Producer::class, $producer);
 | |
|   }
 | |
| }
 |