Maroontress.CuiMallet Example-5

CSharp · Console

/Program.cs

using System;
using System.IO;
using System.Linq;
using Maroontress.Cui;

public class Program
{
	public static void Main()
	{
		ParseArgs(["--count=abc"]);
	}

	private const int DefaultCount = 3;

	private static int Count { get; set; } = DefaultCount;

	private static void PrintUsage(OptionSchema schema, TextWriter output)
	{
		var usage = new[]
		{
			"usage: command [Options...] [--] Arguments...",
			"",
			"Options are:",
		};
		var messages = usage.Concat(schema.GetHelpMessage());
		foreach (var m in messages)
		{
			output.WriteLine(m);
		}
	}

	private static void ParseCount(RequiredArgumentOption o)
	{
		var v = o.ArgumentValue;
		if (!int.TryParse(v, out var num) || num < 0)
		{
			var n = o.ArgumentName;
			throw new OptionParsingException(
				o, $"option '{o}': the value '{v}' is invalid for {n}");
		}
		Count = num;
	}

	public static void ParseArgs(string[] args)
	{
		var schema = Options.NewSchema()
			.Add(
				"count",
				'c',
				"NUM",
				"Specifies the count",
				ParseCount)
			.Add("help", 'h', "Show help and exit");
		try
		{
			var setting = schema.Parse(args);
			var options = setting.Options;
			var arguments = setting.Arguments;
			foreach (var o in options)
			{
				if (o.Name is "help")
				{
					PrintUsage(schema, Console.Out);
					Environment.Exit(0);
				}
			}
			Console.WriteLine($"Count: {Count}");
		}
		catch (OptionParsingException e)
		{
			var output = Console.Error;
			output.WriteLine(e.Message);
			PrintUsage(schema, output);
			Environment.Exit(1);
		}
	}
}
;