Crates.io | ctflag |
lib.rs | ctflag |
version | 0.1.2 |
source | src |
created_at | 2019-06-05 23:52:57.612337 |
updated_at | 2019-06-27 22:34:35.960172 |
description | Command-line flag parsing library |
homepage | |
repository | https://github.com/adamlesinski/ctflag |
max_upload_size | |
id | 139259 |
size | 26,606 |
Disclaimer: This is not an official Google product.
Capture the Flag is a command-line flag parser Rust library.
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());
}
}
}
[dependencies]
ctflag = "0.1"