FrigaT 6b17e6c067
All checks were successful
CI / build-test (push) Successful in 27s
Release / pack-and-publish (release) Successful in 36s
ci
2025-11-27 10:00:33 +03:00
ci
2025-11-27 10:00:33 +03:00
ci
2025-11-27 09:46:12 +03:00
ci
2025-11-27 09:46:12 +03:00
ci
2025-11-27 09:46:12 +03:00

ArgumentsToolkit

ArgumentsToolkit — модульная экосистема для парсинга аргументов командной строки в .NET.


Особенности

  • 📦 Модульность — отдельные пакеты для Core, Validation, Help, Unparser, Verbs.
  • 🧩 Расширяемость — поддержка кастомных конвертеров через IOptionConverter и атрибуты.
  • 🛡️ Валидация — встроенные атрибуты (Range, Regex, AllowedValues) + возможность писать свои.
  • 📖 Справка — генерация helpтекста в Markdown/HTML, легко расширяется форматтерами.
  • 🔄 Unparser — обратная операция: объект → строка аргументов.
  • 🌍 Локализация — кастомные сообщения об ошибках через свойство Message.

📦 Установка

dotnet add package ArgumentsToolkit

или по модулям

dotnet add package ArgumentsToolkit.Core
dotnet add package ArgumentsToolkit.Validation
dotnet add package ArgumentsToolkit.Help

🚀 Быстрый старт

using ArgumentsToolkit;

public class DeployOptions
{
    [Option("server", "s", "Адрес сервера", required: true)]
    public string Server { get; set; } = default!;

    [Option("port", "p", "Порт подключения", defaultValue: 22)]
    [Range(1, 65535, Message = "Порт {value} недопустим для {name}")]
    public int Port { get; set; }

    [Option("env", "e", "Среда деплоя")]
    [AllowedValues("dev", "staging", "prod", Message = "Недопустимое значение {value} для {name}")]
    public string Environment { get; set; } = "dev";

    [Option("mode", "m", "Режим деплоя")]
    public DeployMode Mode { get; set; } = DeployMode.Full;
}

public enum DeployMode { Full, Incremental, DryRun }

class Program
{
    static int Main(string[] args)
    {
        var result = ArgumentsParser.Parse<DeployOptions>(args);

        if (!result.Success)
        {
            foreach (var e in result.Errors)
                Console.WriteLine($"{e.Code}: {e.Message}");
            return 1;
        }

        if (!Validator.Validate(result.Value!, out var vErrors))
        {
            foreach (var e in vErrors)
                Console.WriteLine($"Validation: {e}");
            return 2;
        }

        Console.WriteLine("✅ Успешный парсинг и валидация!");
        return 0;
    }
}

📖 Пример запуска

dotnet run -- --server myhost --port 8080 --env staging --mode Incremental

Вывод:

✅ Успешный парсинг и валидация!

🧩 Архитектура пакетов

  • ArgumentsToolkit.Core — парсинг, атрибуты [Option], конвертеры.
  • ArgumentsToolkit.Validation — атрибуты валидации и движок Validator.
  • ArgumentsToolkit.Help — модель справки и форматтеры.
  • ArgumentsToolkit.Verbs — поддержка команд (в разработке).

🛠️ Roadmap

  • Поддержка списков и словарей в аргументах.
  • Плагинная система для Help/Validation.
Description
No description provided
Readme 65 KiB
2025-11-27 10:49:37 +03:00
Languages
C# 100%