Что такое Clap и зачем он нужен?
Clap (Command Line Argument Parser) — это один из самых популярных и мощных фреймворков для создания интерфейсов командной строки (CLI) на языке Rust. Он позволяет разработчикам быстро и удобно описывать аргументы, флаги, подкоманды и автоматически генерировать справку. Clap используется в таких известных проектах, как ripgrep, fd и bat. Благодаря строгой типизации Rust и макросам, Clap обеспечивает безопасность на этапе компиляции и избавляет от ручного парсинга строк.
Установка
Добавьте зависимость в Cargo.toml:
[dependencies]
clap = { version = "4.5", features = ["derive"] }Флаг derive включает поддержку процедурных макросов — это самый удобный способ использования.
Основные функции
- Декларативный парсинг — описание аргументов через структуры и атрибуты.
- Автоматическая генерация справки (
--help). - Поддержка подкоманд (например,
git clone,git push). - Валидация типов — числа, строки, флаги, перечисления.
- Bash/Zsh/Fish автодополнение.
- Цветной вывод ошибок.
Пример кода на Rust
Создадим простой калькулятор с двумя режимами: сложение и вычитание.
use clap::Parser;
#[derive(Parser)]
#[command(name = "calc", version = "1.0", about = "Простой калькулятор")]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(clap::Subcommand)]
enum Commands {
/// Сложить два числа
Add { a: f64, b: f64 },
/// Вычесть b из a
Sub { a: f64, b: f64 },
}
fn main() {
let cli = Cli::parse();
match cli.command {
Commands::Add { a, b } => println!("Результат: {}", a + b),
Commands::Sub { a, b } => println!("Результат: {}", a - b),
}
}Запуск: cargo run -- add 10 5 выведет Результат: 15.
Когда использовать
Clap идеально подходит для любых CLI-инструментов на Rust — от простых утилит до сложных многоуровневых приложений. Используйте его, если вам нужен надежный, документированный и быстрый парсер аргументов с минимальным количеством кода. Благодаря derive-макросам, вы получаете строгую типизацию и автогенерацию справки без boilerplate.
Если ваш проект требует высокой производительности (например, обработка логов в реальном времени) или сложной иерархии команд, Clap — лучший выбор. Он также поддерживает кастомные валидаторы и парсинг переменных окружения.
Заключение
Clap — это стандарт де-факто для CLI в экосистеме Rust. Он сочетает удобство Python-библиотек (argparse, click) с производительностью и безопасностью Rust. Начните с cargo add clap --features derive и создайте свой первый CLI за 5 минут.