Текст, резюмированный ИИ durumis
- Rust - это очень подходящий язык для создания CLI, и нам удалось реализовать простую CLI-программу с функциями входа и выхода из системы, используя библиотеки clap и ratatui.
- Используя clap, мы определили различные параметры и подкоманды, а с помощью ratatui реализовали интерактивное окно ввода, что повысило удобство и безопасность.
- По состоянию на 18 апреля 2024 года автор показал, как удобно писать CLI-программы на Rust.
Мой опыт показывает, что наиболее простым и удобным языком для создания CLI является Rust.
Он позволяет определять все ограничения и проверки на уровне структуры, используя отличные возможности расширения макросов, и,
поэтому, полноценно использовать силу этого типа данных.
В этой публикации создадим простой пример программы CLI для обработки входа и выхода из системы с помощью clap и ratatui и опишем основные принципы написания и методы применения.
Настройка clap
Сначала добавим к зависимостям следующие 4 элемента:
```javascript atty = { version = "0.2.14", optional = true } structopt = { version = "0.3.18", optional = true } clap = { version = "4.4.18", features = ["derive"] } serde = { version = "1", features = ["derive"] }
Первые два элемента предназначены для сопоставления команд cargo, а последние два — для разбора clap.
Теперь добавим код по частям.
Сначала определим тип верхней команды и вставим в нее перечисление подкоманд.
В перечисление SubCommand вскоре будут включены команды входа и выхода из системы.
И после инициализации команды, как показано выше, создание базовой структуры завершено.
Созданную таким образом программу можно выполнить с помощью cargo run или
после установки с помощью cargo install.
Определение подкоманд
Теперь определим подкоманды по одной.
Login и Logout будут представлять собой отдельные подкоманды.
Для определения команды login мы создали отдельный файл.
Определение элементов флагов осуществляется с помощью внутреннего объекта Option.
short указывается, будет ли создан ярлык типа -i, а long указывает, будет ли создан полный текст типа --id. help — это, конечно, справка.
Чтобы эти флаги стали необязательными элементами, необходимо ввести тип Option или назначить свойство default_value.
Затем добавим его в качестве варианта в подкоманде объекта верхней команды.
А теперь команда logout. С ней проще.
Дело в том, что у нее нет параметров.
Аналогично, зарегистрируем ее как подкоманду верхней команды.
Поскольку действие в точке входа также разветвляется как перечисление, достаточно выполнить разветвление по шаблону.
А после выполнения
мы увидим, как добавление произошло в список подкоманд.
Выполнение также проходит успешно. Если пропустить обязательный флаг, будет выведено сообщение об отсутствии флага.
При передаче все будет работать правильно. Однако пока что никаких действий не происходит.
Отделение и реализация действия
Теперь добавим реализацию по мере необходимости. Что касается меня, то в таких ситуациях я предпочитаю разделять логику по файлам. Если все свести вместе, код станет трудным для чтения и будет выглядеть неаккуратно.
У нас есть модуль action и по одному файлу для каждого действия подкоманды.
Функции каждого действия принимают в качестве аргументов значения параметров каждой подкоманды.
А в точке входа выполняем все действия с помощью run