Cote
A simple option manager manage the AOpt, support auto generate help message.
Setup
cargo add cote
Enable Features from aopt
Enable sync feature
If you want the utils of current crate implement Send and Sync, you can enable sync feature.
[dependencies]
cote = { version = "*", features = [ "sync" ] }
Documents
See reference for more information.
Example
Using Cote generate struct from command line options.
use aopt::opt::Pos;
use cote::prelude::*;
fn main() -> cote::Result<()> {
#[derive(Debug, Cote)]
pub struct Cli {
flag: bool,
#[arg(alias = "-n")]
name: String,
#[arg(help = "`Option` mean the option is not force required")]
nick: Option<String>,
#[arg(index = "1")]
from: Pos<String>,
#[pos(index = 2..)]
to: Vec<String>,
}
let cli = Cli::parse(Args::from(["app", "-nLily", "src", "foo", "bar"]))?;
assert!(!cli.flag);
assert_eq!(cli.name, String::from("Lily"));
assert_eq!(cli.nick, None);
assert_eq!(cli.from, Pos(String::from("src")));
assert_eq!(cli.to, vec![String::from("foo"), String::from("bar")]);
let cli = Cli::parse(Args::from(["app", "--name", "Lily", "src", "foo", "bar"]))?;
assert!(!cli.flag);
assert_eq!(cli.name, String::from("Lily"));
assert_eq!(cli.nick, None);
assert_eq!(cli.from, Pos(String::from("src")));
assert_eq!(cli.to, vec![String::from("foo"), String::from("bar")]);
assert!(Cli::parse(Args::from(["app", "--nick", "Lily", "src", "foo", "bar"])).is_err());
Ok(())
}
LICENSE
MPL-2.0