1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 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) - при возникновении ошибки
*/
```