3 releases
0.1.2 | Jun 27, 2019 |
---|---|
0.1.1 | Jun 11, 2019 |
0.1.0 | Jun 5, 2019 |
#145 in #capture
Used in ctflag
20KB
490 lines
Capture the Flag
Disclaimer: This is not an official Google product.
Capture the Flag is a command-line flag parser Rust library.
Usage
use ctflag::{Flags, FromArg, FromArgError, FromArgResult};
#[derive(Flags)]
struct MyFlags {
#[flag(desc = "The floopy floops the whoop")]
enable_floopy: bool,
#[flag(
desc = "How many slomps to include",
placeholder = "INTEGER",
default = 34
)]
slomp_count: i64,
#[flag(desc = "An optional path to a Gmup", placeholder = "PATH")]
gmup: Option<String>,
#[flag(short = 'h', desc = "Prints this help message")]
help: bool,
}
// Custom type.
enum Fruit {
Apple,
Orange,
}
impl FromArg for Fruit {
fn from_arg(s: &str) -> FromArgResult<Self> {
match s {
"apple" => Ok(Fruit::Apple),
"orange" => Ok(Fruit::Orange),
_ => Err(FromArgError::with_message("must be an apple or orange")),
}
}
}
fn main() {
let result = MyFlags::from_args(std::env::args());
match result {
Ok((flags, args)) => {
if flags.help {
println!("{}", MyFlags::description());
return;
}
// ...
}
Err(err) => {
println!("Error parsing flags: {}", err);
println!("{}", MyFlags::description());
}
}
}
Setup
[dependencies]
ctflag = "0.1"
Dependencies
~2.5MB
~54K SLoC