protected function execute(InputInterface $input, OutputInterface $output): void
    {
        $destination = (string) $input->getOption('destination');

        if (!is_readable(dirname($destination))
            || !is_readable($destination) && !mkdir($destination, 0755, true)
        ) {
            throw new \Exception(sprintf('Unable to read output directory [%s]', $destination));
        }

        $wsdlToClass = new WsdlToClass(
            new Wsdl((string) $input->getArgument('wsdl')),
            $destination,
            (string) $input->getOption('namespace'),
            new RegexParser(),
            new TwigGenerator($input->getOption('template')),
            new ResourceWriter(),
            new Printer(new Printer\SymfonyOutputBridge($output))
        );

        $wsdlToClass->execute();
    }