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