*/ class struct_wrapper/**/ { /** * @var \Closure {function} * @author Christian Fraß */ public $convert_key_in; /** * @var \Closure {function} * @author Christian Fraß */ public $convert_key_out; /** * @var \Closure {function} * @author Christian Fraß */ public $convert_value_in; /** * @var \Closure {function} * @author Christian Fraß */ public $convert_value_out; /** * @author Christian Fraß */ public function __construct( \Closure $core_setup, \Closure $core_teardown, \Closure $core_create, \Closure $core_update, \Closure $core_delete, \Closure $core_read, \Closure $core_search, \Closure $convert_key_in, \Closure $convert_key_out, \Closure $convert_value_in, \Closure $convert_value_out ) { $this->core_setup = $core_setup; $this->core_teardown = $core_teardown; $this->core_create = $core_create; $this->core_update = $core_update; $this->core_delete = $core_delete; $this->core_read = $core_read; $this->core_search = $core_search; $this->convert_key_in = $convert_key_in; $this->convert_key_out = $convert_key_out; $this->convert_value_in = $convert_value_in; $this->convert_value_out = $convert_value_out; } } /** * @author Christian Fraß */ function wrapper_make/**/( \Closure $core_setup, \Closure $core_teardown, \Closure $core_create, \Closure $core_update, \Closure $core_delete, \Closure $core_read, \Closure $core_search, \Closure $convert_key_in, \Closure $convert_key_out, \Closure $convert_value_in, \Closure $convert_value_out ) : struct_wrapper/**/ { return ( new struct_wrapper/**/( $core_setup, $core_teardown, $core_create, $core_update, $core_delete, $core_read, $core_search, $convert_key_in, $convert_key_out, $convert_value_in, $convert_value_out ) ); } /** * @author Christian Fraß */ function wrapper_teardown/**/( struct_wrapper/**/ $subject ) : void { ($subject->core_teardown)(); } /** * @author Christian Fraß */ function wrapper_setup( struct_wrapper/**/ $subject ) : void { ($subject->core_setup)(); } /** * @author Christian Fraß */ function wrapper_create( struct_wrapper/**/ $subject, /*type_value_outer */$value_outer )/* : type_key_outer*/ { $value_inner = ($subject->convert_value_in)($value_outer); $key_inner = ($subject->core_create)($value_inner); $key_outer = ($subject->convert_key_out)($key_inner); return $key_outer; } /** * @author Christian Fraß */ function wrapper_update( struct_wrapper/**/ $subject, /*type_key_outer */$key_outer, /*type_value_outer */$value_outer ) : void { $key_inner = ($subject->convert_key_in)($key_outer); $value_inner = ($subject->convert_value_in)($value_outer); ($subject->core_update)($key_inner, $value_inner); } /** * @author Christian Fraß */ function wrapper_delete( struct_wrapper/**/ $subject, /*type_key_outer */$key_outer ) : void { ($subject->core_delete)($key_outer); } /** * @author Christian Fraß */ function wrapper_read( struct_wrapper/**/ $subject, /*type_key_outer */$key_outer )/* : type_value_outer*/ { $key_inner = ($subject->convert_key_in)($key_outer); $value_inner = ($subject->core_read)($key_inner); $value_outer = ($subject->convert_value_out)($value_inner); return $value_outer; } /** * @author Christian Fraß */ function wrapper_search( struct_wrapper/**/ $subject, array $parameters = [] ) : array { $keys_inner = ($subject->core_search)($parameters); $keys_outer = \alveolata\list_\map/**/( $keys_inner, function (/*type_key_inner */$key_inner)/* : type_key_outer*/ use ($subject) { return ($subject->convert_key_out)($key_inner); } ); return $keys_outer; } ?>