argsys 1.0.2

Simple argument-handler library
Documentation
# ArgSys
Использование ArgSys предполагает  следующие шаги:
- Создание темплейтов "вручную" или при помощи функции build_template. Ниже рассмотрим пример использования функции:
```rust
/* С указанием короткой версии вызова: */
let help_template: Template = buld_template("--help", Some("-h"), "Вывод справки", 0);
/* Без указания короткой версии вызова: */
let help_template: Template = build_template("--help", None, "Вывод справки", 0);

/**
 * Первый аргумент содержит полную версию команды вызова
 * Второй, опциональный аргумент, короткую версию
 * Третий аргумент содержит описание команды
 * Четвертый аргумент указывает на количество последующих аргументов программы, которые будут переданы функции-триггеру 
 */
```
- Создание и инициализация хандлера:
```rust
/* Создаем объект хандлера */
let mut arg_handler: ArgHandler = ArgHandler::default();

/* Инициализируем хандлер */
arg_handler.init(std::env::args().collect(), true);

/**
 * В первый аргумент передаем аргументы программы из std::env
 * Во второй аргумент булево:
 * - Если истинна, то первый аргумент будет пропущен
 * - Если ложь, то первый аргумент будет обработан
 * *-Это полезно, если первым аргументом передается путь к программе, который обрабатывать не нужно
 */
```

- Создания функций-обработчиков: Существует три типа функций-обработчика: Базовый, справочный и "последний". Отличие их в том, что в справочную функцию передаются так же все темплейты, которые были загруженны в хандлер
``` rust
/* Создаем базовую функцию-обработчик */
fn based_action(data: Vec<String>) {
    /* И для примера обработаем переданные аргументы */
    for i in data {
        println!("{}", i);
    }
}
/**
 * В данном случае, вектор data будет содержать количество элементов, которе указано в объявлении темплейта 
 */

/* Создаем справочную функцию-обработчик */
fn help_action(_: Vec<String>, all_templates: Vec<Template>) {
    /* И для примера выводим каждый темплейт */
    for i in all_templates {
        println!("{}", i);
    }
}

/* Создаем "последнюю" функцию-обработчик */
fn last_action(data: Vec<String>) {
    /* И для примера выводим все последующие аргументы программы */
    for i in data {
        println!("{data}");
    }
}
```
- Занесения функций-обработчиков и их темплейтов в хандлер
```rust
/* Добавляем базовую функцию-обработчик и темплейт к ней */
arg_handler.add_action(template, based_action);

/* Добавляем справочную функцию-обработчик и темплейт к ней */
arg_handler.add_help_action(help_template, help_action);

/* Добавляем "последнюю" функцию-обработчик и темплейт к ней */
arg_handler.add_last_action(template, last_action);
/**
 * В "последнюю" функцию-обработчик будут переданы все последующие аргументы функции.
 * Так же, после вызовая такой функции работа хандлера будет остановлена, 
 *  последующие аргументы будут проигнорированы.
 */
```

- И запуска хандлера
```rust
/* Запускаем хандлер */
arg_handler.run();

/** Функция run вернет result: 
 *      Ok(()) - если все прошло без проишествий
 *      Err(HandlerError) - при возникновении ошибки
 */
```