cote 0.17.1

Quickly build your command line utils
Documentation
use aopt::prelude::AFwdParser;
use cote::prelude::*;

#[derive(Debug, PartialEq, Eq, CoteOpt, CoteVal)]
#[coteval(forward = i32, map = Speed)]
pub struct Speed(i32);

#[derive(Debug, CoteVal, CoteOpt, PartialEq)]
#[coteval(igcase)]
pub enum IM {
    #[coteval(alias = "qq")]
    OICQ,

    ICQ,

    Line,

    Skype,

    WeChat,
}

#[test]
fn value() {
    assert!(value_impl().is_ok());
}

fn value_impl() -> color_eyre::Result<()> {
    color_eyre::install()?;
    let mut parser = AFwdParser::default();

    parser.add_opt("--speed".infer::<Speed>())?;
    parser.add_opt("-im;--instant-message".infer::<IM>())?;
    parser.parse(Args::from(["app", "--speed=42", "-im=qq"]))?;

    assert_eq!(Speed::fetch("--speed", parser.optset_mut())?, Speed(42));
    assert_eq!(
        IM::fetch("--instant-message", parser.optset_mut())?,
        IM::OICQ
    );
    Ok(())
}