11 releases (6 breaking)

0.9.0 Nov 30, 2024
0.7.0 Nov 17, 2024
0.5.1 Jul 30, 2024
0.4.6 Oct 10, 2023
0.2.2 Dec 30, 2022

#498 in Command-line interface

Download history 2/week @ 2024-09-14 11/week @ 2024-09-21 2/week @ 2024-09-28 120/week @ 2024-10-05 27/week @ 2024-10-12 2/week @ 2024-10-19 27/week @ 2024-11-02 1/week @ 2024-11-09 240/week @ 2024-11-16 34/week @ 2024-11-23 129/week @ 2024-11-30

413 downloads per month
Used in 3 crates

MPL-2.0 license

745KB
18K SLoC

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

Dependencies

~2.6–3.5MB
~61K SLoC