Expand description
§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 {
/// A flag option named `--flag`
flag: bool,
/// Comment here set the help message for option
#[arg(alias = "-n")]
name: String,
#[arg(help = "`Option` mean the option is not force required")]
nick: Option<String>,
/// A position option at index 1
#[arg(index = "1")]
from: Pos<String>,
/// A positon option collect argument start from 2
#[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
Re-exports§
pub use aopt;pub use aopt_help;pub use cote_derive;
Modules§
- _reference
- Documentation: Cote Tutorial
- prelude
- shell
- valid
Macros§
- impl_
fetch - valid
- Check the value of option.