/// <summary>
        /// Print usage.
        /// </summary>
        public static void PrintUsage(
            [NotNull] this CmdLineRules rules,
            [NotNull] TextWriter writer,
            [NotNull] PrintUsageSettings settings)
        {
            Code.NotNull(rules, nameof(rules));
            Code.NotNull(writer, nameof(writer));
            Code.NotNull(settings, nameof(settings));

            UsagePrinter.PrintUsage(rules, writer, settings);
        }
        /// <summary>
        /// Print usage.
        /// </summary>
        public static void PrintUsage(
            [NotNull] this CmdLineRules rules,
            [NotNull] TextWriter writer,
            [NotNull] PrintUsageSettings settings)
        {
            if (rules == null)
            {
                throw new ArgumentNullException(nameof(rules));
            }
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            UsagePrinter.PrintUsage(rules, writer, settings);
        }