using System.Collections.Generic; namespace PCL.Core.App.Cli; public class SubcommandDefinition { public required string CommandText { get; init; } public required IEnumerable Subcommands { private get; init; } public IReadOnlyDictionary SubcommandMap { get { if (field is not null) return field; var map = new Dictionary(); foreach (var c in Subcommands) map[c.CommandText] = c; return field = map.AsReadOnly(); } } = null!; public bool Contains(string subcommandText) { return SubcommandMap.ContainsKey(subcommandText); } public static implicit operator SubcommandDefinition((string commandText, IEnumerable subcommands) tuple) { return new SubcommandDefinition { CommandText = tuple.commandText, Subcommands = tuple.subcommands }; } public static implicit operator SubcommandDefinition(string commandText) { return new SubcommandDefinition { CommandText = commandText, Subcommands = [] }; } }