void CommandLineHandlerBase::apply(SuperLogger& logger)
{
    if (impl->m_version.is_set())
        print_version_information(logger);

    if (impl->m_system.is_set())
        System::print_information(logger);

    if (impl->m_display_options.is_set())
    {
        LOG_INFO(logger, "recognized options:");
        impl->m_parser.print_recognized_options(logger);
    }

    impl->m_parse_results.m_messages.print(logger);

    if (impl->m_parse_results.m_errors > 0 ||
        impl->m_parse_results.m_warnings > 0)
    {
        LOG(
            logger,
            impl->m_parse_results.m_errors > 0 ? LogMessage::Fatal : LogMessage::Warning,
            FMT_SIZE_T " error%s, " FMT_SIZE_T " warning%s encountered while parsing the command line.",
            impl->m_parse_results.m_errors,
            impl->m_parse_results.m_errors > 1 ? "s" : "",
            impl->m_parse_results.m_warnings,
            impl->m_parse_results.m_warnings > 1 ? "s" : "");
    }
}
void CommandLineHandlerBase::parse(
    const int       argc,
    const char*     argv[],
    SuperLogger&    logger)
{
    ParseResults results;
    impl->m_parser.parse(argc, argv, results);

    if (impl->m_message_coloring.is_set())
        logger.enable_message_coloring();

    if (impl->m_message_verbosity.is_set())
        set_verbosity(logger, impl->m_message_verbosity.value());

    if (impl->m_version.is_set())
        print_version_information(logger);

    if (impl->m_system.is_set())
        print_system_information(logger);

    if (impl->m_help.is_set())
    {
        const string program_name = filesystem::path(argv[0]).filename().string();
        print_program_usage(program_name.c_str(), logger);
        exit(0);
    }

    if (impl->m_display_options.is_set())
    {
        LOG_INFO(logger, "recognized options:");
        impl->m_parser.print_recognized_options(logger);
    }

    results.m_messages.print(logger);

    if (results.m_errors > 0 || results.m_warnings > 0)
    {
        LOG(
            logger,
            results.m_errors > 0 ? LogMessage::Fatal : LogMessage::Warning,
            FMT_SIZE_T " error%s, " FMT_SIZE_T " warning%s encountered while parsing the command line.",
            results.m_errors,
            results.m_errors > 1 ? "s" : "",
            results.m_warnings,
            results.m_warnings > 1 ? "s" : "");
    }
}