* } */ function make( array $descriptor ) : interface_source { switch ($descriptor['kind']) { case 'ics_feed': { return ( new class_source_ics_feed( $descriptor['data']['url'], ($descriptor['data']['lifetime'] ?? (60 * 15)), ($descriptor['data']['combine'] ?? false) ) ); } default: { throw ( new \Exception( \sprintf( 'unhandled source kind: %s', $descriptor['kind'] ) ) ); break; } } }