General template for building command line interface (CLI) using (and written in) Rust
bash
cargo run --example simple
bash
cargo run --example simple -- --echo "hello universe"
bash
cargo run --example stateful -- --echo "hello universe" --twice
Cargo.toml
toml
...
[dependencies]
medusa = "0.3.0"
...
rust
...
use medusa::{ArgType, CommandLine, Handler, Variant};
...
```rust ... fn hello(handler: &Handler) { println!("Hello, world!"); }
fn echo(handler: &Handler, payload: String) { println!("payload : {}", payload); }
fn printtwice(handler: &Handler) { if let Some(argtype) = handler.getarg("--echo") { if let ArgType::Content(payload) = argtype { println!("printed once more : {}", payload); } } } ... ```
rust
...
let mut handler: Handler = Handler::new();
handler.add(
String::from("--hello"),
Variant::Plain(hello),
String::from("Print hello world for testing purpose.")
);
handler.add(
String::from("--echo"),
Variant::WithArg(echo),
String::from("Print string passed to this parameter to output.")
);
handler.add(
String::from("--twice"),
Variant::Plain(print_twice),
String::from("Print again the payload \"--echo\" have."),
);
...
```rust ... use std::env;
let mut command: CommandLine = CommandLine::new(); command.sethandler(handler); command.setname("mycli"); command.set_version("1.0.0"); command.run(env::args()); ... ```
bash
cargo run -- --hello
cargo run -- --echo something
cargo run -- --echo greatstring --twice
bash
cargo build