diff --git a/ArgumentsToolkit.Core/Parsers/ArgumentsParser.cs b/ArgumentsToolkit.Core/Parsers/ArgumentsParser.cs index 622bf13..8030ab1 100644 --- a/ArgumentsToolkit.Core/Parsers/ArgumentsParser.cs +++ b/ArgumentsToolkit.Core/Parsers/ArgumentsParser.cs @@ -136,10 +136,16 @@ public static class ArgumentsParser return result; } - public static string ToArguments(T options) + /// + /// Формирование строки аргументов + /// + /// + /// + /// + public static string ToArguments(T options, bool useShortName = false) { var props = typeof(T).GetProperties(); - var parts = new List(); + var parts = new List>(); foreach (var prop in props) { @@ -151,17 +157,22 @@ public static class ArgumentsParser string prefix = "--" + opt.Name; + if (useShortName && !string.IsNullOrWhiteSpace(opt.ShortName)) + { + prefix = "-" + opt.ShortName; + } + if (prop.PropertyType == typeof(bool)) { if ((bool)value) - parts.Add(prefix); + parts.Add(new(prefix, "")); } else if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(List<>)) { var list = (System.Collections.IList)value; if (list.Count > 0) - parts.Add($"{prefix} {string.Join(",", list.Cast())}"); + parts.Add(new(prefix, string.Join(",", list.Cast()))); } else if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Dictionary<,>)) @@ -171,15 +182,15 @@ public static class ArgumentsParser foreach (var k in dict.Keys) items.Add($"{k}={dict[k]}"); if (items.Count > 0) - parts.Add($"{prefix} {string.Join(",", items)}"); + parts.Add(new(prefix, string.Join(",", items))); } else { - parts.Add($"{prefix} {value}"); + parts.Add(new(prefix, $"{value}")); } } - return string.Join(" ", parts); + return string.Join(" ", parts.Select(kvp => kvp.Key + " \"" + kvp.Value + "\"")); } private static bool TryParse(Type targetType, string input, IOptionConverter? converterAttr, out object? value) diff --git a/Demo/Program.cs b/Demo/Program.cs index 9705eac..6b09a73 100644 --- a/Demo/Program.cs +++ b/Demo/Program.cs @@ -40,10 +40,14 @@ internal class Program Console.WriteLine($"Environment: {result.Value.Environment}"); Console.WriteLine($"DryRun: {result.Value.DryRun}"); Console.WriteLine($"Mode: {result.Value.Mode}"); + Console.WriteLine($"Path: {result.Value.Path}"); Console.WriteLine($"Config.Author: {result.Value.Config.Author}"); Console.WriteLine($"Config.Timeout: {result.Value.Config.Timeout}"); Console.ResetColor(); + Console.WriteLine("Строка аргументов:"); + Console.WriteLine(ArgumentsParser.ToArguments(result.Value!, true)); + return 0; } @@ -63,6 +67,9 @@ public class DeployOptions [AllowedValues("dev", "staging", "prod")] public string Environment { get; set; } = "dev"; + [Option("path", null, "Среда деплоя")] + public string? Path { get; set; } + [Option("dry-run", "d", "Пробный запуск без изменений")] public bool DryRun { get; set; } diff --git a/Demo/Properties/launchSettings.json b/Demo/Properties/launchSettings.json index b173926..2208d15 100644 --- a/Demo/Properties/launchSettings.json +++ b/Demo/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "Demo": { "commandName": "Project", - "commandLineArgs": "--server myhost --port 8080 --env staging --mode Incremental --config \"{\\\"Author\\\":\\\"FrigaT\\\",\\\"Timeout\\\":60}" + "commandLineArgs": "--server \"myhost\" --port 8080 --path \"C:\\Job\\Projects\\FrigaT\\ReleaseUpdater\\Updater.Test\\bin\\Debug\\net8.0\" --env staging --mode Incremental --config \"{\\\"Author\\\":\\\"FrigaT\\\",\\\"Timeout\\\":60} " }, "Demo (Error)": { "commandName": "Project",