Clap क्या है और इसकी आवश्यकता क्यों है?
सिस्टम प्रोग्रामिंग की दुनिया में, Rust ने खुद को एक ऐसी भाषा के रूप में स्थापित किया है जो C/C++ के प्रदर्शन को मेमोरी सुरक्षा के साथ जोड़ती है। हालांकि, कंसोल उपयोगिताएँ बनाते समय, डेवलपर्स को अक्सर कमांड लाइन आर्गुमेंट्स को पार्स करने के नियमित कार्य का सामना करना पड़ता है। लाइब्रेरी Clap (Command Line Argument Parser) Rust के लिए सबसे लोकप्रिय और कार्यात्मक CLI फ्रेमवर्क है, जो फ्लैग, ऑप्शन और सबकमांड को संसाधित करने का सारा काम अपने हाथ में ले लेता है।
Clap आपको अनुमति देता है:
- स्वचालित रूप से हेल्प (
--help) और वर्जन (--version) जनरेट करना; - पोजीशनल आर्गुमेंट्स, नामित ऑप्शन और फ्लैग को संसाधित करना;
- नेस्टेड सबकमांड बनाना (जैसे
gitयाcargoमें); - डेटा प्रकारों को मान्य करना और आर्गुमेंट्स की अनिवार्यता की जाँच करना;
- Bash, Zsh, Fish और PowerShell शेल के लिए ऑटो-कम्प्लीशन के साथ काम करना।
शक्तिशाली derive मैक्रो और डिक्लेरेटिव API के कारण, Clap मैन्युअल पार्सिंग की तुलना में कोड की मात्रा को 5-10 गुना कम कर देता है। लाइब्रेरी सरल उपयोगिताओं से लेकर दर्जनों ऑप्शन वाले जटिल इंटरफेस तक का समर्थन करती है।
Rust प्रोजेक्ट में Clap इंस्टॉल करना
Cargo.toml में डिपेंडेंसी जोड़ें:
[dependencies]clap = { version = "4.5", features = ["derive"] }फ्लैग features = ["derive"] मैक्रोज़ के लिए समर्थन सक्षम करता है — यह अधिकांश प्रोजेक्ट्स के लिए अनुशंसित तरीका है। न्यूनतम उपयोगिताओं के लिए, आप केवल builder API (बिना derive के) का उपयोग कर सकते हैं।
उदाहरण 1: derive मैक्रो के साथ सबसे सरल पार्सर
एक उपयोगिता बनाते हैं जो उपयोगकर्ता का नाम और एक वैकल्पिक अभिवादन फ्लैग लेती है:
use clap::Parser;
#[derive(Parser)]#[command(name = "greet")]#[command(about = "सरल अभिवादन", long_about = None)]struct Cli { /// उपयोगकर्ता का नाम name: String,
/// अभिवादन को अपरकेस में प्रिंट करें #[arg(short, long)] uppercase: bool,}
fn main() { let cli = Cli::parse();
let greeting = format!("नमस्ते, {}!", cli.name); if cli.uppercase { println!("{}", greeting.to_uppercase()); } else { println!("{}", greeting); }}प्रोग्राम चलाएँ:
$ cargo run -- दुनियानमस्ते, दुनिया!
$ cargo run -- दुनिया --uppercaseनमस्ते, दुनिया!
$ cargo run -- --help# स्वचालित रूप से जनरेट की गई हेल्पउदाहरण 2: प्रकार और डिफ़ॉल्ट मानों वाले ऑप्शन
Clap स्वचालित रूप से स्ट्रिंग्स को आवश्यक प्रकारों (संख्या, एनुम, दिनांक) में बदल देता है। पुनरावृत्तियों की संख्या निर्दिष्ट करने के लिए एक ऑप्शन जोड़ते हैं:
use clap::Parser;
#[derive(Parser)]#[command(name = "repeat")]struct Cli { /// दोहराने के लिए टेक्स्ट text: String,
/// पुनरावृत्तियों की संख्या (डिफ़ॉल्ट 1) #[arg(short, long, default_value_t = 1)] count: u32,}
fn main() { let cli = Cli::parse(); for _ in 0..cli.count { println!("{}", cli.text); }}अब आप निष्पादित कर सकते हैं:
$ cargo run -- "Rust" -c 3RustRustRustउदाहरण 3: सबकमांड (उप-कमांड) — Git की तरह
कार्य प्रबंधन (todo list) के लिए add, list और done कमांड के साथ एक मिनी-उपयोगिता बनाते हैं:
use clap::{Parser, Subcommand};
#[derive(Parser)]#[command(name = "todo")]#[command(about = "कार्य प्रबंधक")]struct Cli { #[command(subcommand)] command: Commands,}
#[derive(Subcommand)]enum Commands { /// नया कार्य जोड़ें Add { /// कार्य का टेक्स्ट task: String, }, /// सभी कार्य दिखाएँ List, /// कार्य को पूर्ण के रूप में चिह्नित करें Done { /// कार्य का ID id: u32, },}
fn main() { let cli = Cli::parse();
match &cli.comman