Files
ArgumentsToolkit/README.md
FrigaT 24149a6d19
Some checks failed
CI / build-test (push) Successful in 31s
Release / package (ArgumentsToolkit) (release) Successful in 29s
Release / package (ArgumentsToolkit.Core) (release) Successful in 27s
Release / package (ArgumentsToolkit.Help) (release) Successful in 29s
Release / package (ArgumentsToolkit.Validation) (release) Successful in 26s
Release / publish (release) Failing after 17s
ci
2025-11-27 09:46:12 +03:00

111 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ArgumentsToolkit
**ArgumentsToolkit** — модульная экосистема для парсинга аргументов командной строки в .NET.
---
## ✨ Особенности
- 📦 **Модульность** — отдельные пакеты для Core, Validation, Help, Unparser, Verbs.
- 🧩 **Расширяемость** — поддержка кастомных конвертеров через `IOptionConverter` и атрибуты.
- 🛡️ **Валидация** — встроенные атрибуты (`Range`, `Regex`, `AllowedValues`) + возможность писать свои.
- 📖 **Справка** — генерация helpтекста в Markdown/HTML, легко расширяется форматтерами.
- 🔄 **Unparser** — обратная операция: объект → строка аргументов.
- 🌍 **Локализация** — кастомные сообщения об ошибках через свойство `Message`.
---
## 📦 Установка
```bash
dotnet add package ArgumentsToolkit
```
или по модулям
```bash
dotnet add package ArgumentsToolkit.Core
dotnet add package ArgumentsToolkit.Validation
dotnet add package ArgumentsToolkit.Help
```
---
## 🚀 Быстрый старт
```csharp
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;
}
}
```
---
## 📖 Пример запуска
```bash
dotnet run -- --server myhost --port 8080 --env staging --mode Incremental
```
Вывод:
```
✅ Успешный парсинг и валидация!
```
---
## 🧩 Архитектура пакетов
- **ArgumentsToolkit.Core** — парсинг, атрибуты `[Option]`, конвертеры.
- **ArgumentsToolkit.Validation** — атрибуты валидации и движок `Validator`.
- **ArgumentsToolkit.Help** — модель справки и форматтеры.
- **ArgumentsToolkit.Verbs** — поддержка команд (в разработке).
---
## 🛠️ Roadmap
- [ ] Поддержка списков и словарей в аргументах.
- [ ] Плагинная система для Help/Validation.