ci
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

This commit is contained in:
2025-11-27 09:46:12 +03:00
parent c1f50fcca0
commit 24149a6d19
5 changed files with 386 additions and 5 deletions

111
README.md Normal file
View File

@@ -0,0 +1,111 @@
# 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.