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);
 | 
						|
  }
 | 
						|
}
 |