dynarg 2.1.4

A simple mechanism for dynamic robust argument handling
Documentation
#[cfg(test)]
mod tests {
    use dynarg::DynArgError::{NoSuchArg, NotOfType};
    use dynarg::{Arg, Args};

    #[test]
    fn test_arg() {
        let a = 5;
        let mut arg = Arg::new(Box::new(a));
        #[cfg(feature = "used")]
        assert_eq!(arg.poke::<i32>(), Ok(&5));
        #[cfg(feature = "used")]
        assert_eq!(arg.used(), true);

        let arg = Arg::new(Box::new(a));
        #[cfg(feature = "used")]
        assert_eq!(arg.used(), false);

        let test = "apple";
        let arg = Arg::new(Box::new(test));
        assert_eq!(arg.get::<&str>(), Ok(&"apple"));

        let test2 = String::from("apple");
        let arg2 = Arg::new(Box::new(test2));
        assert_eq!(arg2.get::<String>(), Ok(&"apple".to_string()));

        let test3 = String::from("apple");
        let arg3 = Arg::new(Box::new(test3));
        assert_eq!(arg3.get::<i32>(), Err(NotOfType { name: "i32" }));
    }

    #[test]
    fn test_args() {
        let mut args = Args::default();
        let arg_name = String::from("number");
        args.insert(arg_name.as_str(), Box::new(6));
        let result = args.get::<i32>("number");
        assert_eq!(result, Ok(&6));

        let static_str = "A";
        args.insert("letter", Box::new(static_str));
        let arg = args.get::<&str>("letter");
        assert_eq!(arg, Ok(&"A"));

        let arg2 = args.get::<&str>("nonexistent");

        assert_eq!(
            arg2,
            Err(NoSuchArg {
                name: "nonexistent"
            })
        );

        let mut args = Args::default();
        args.insert_i32("nice", 69);
        args.insert_i32("wow", 42);
        #[cfg(feature = "used")]
        args.poke_i32("nice").unwrap();
        #[cfg(feature = "used")]
        assert_eq!(args.all_used(), false);
        #[cfg(feature = "used")]
        assert_eq!(args.iter_not_used_name().collect::<Vec<&str>>(), ["wow"]);

        let mut args = Args::default();
        args.insert_i32("nice", 69);
        args.insert_i32("wow", 42);
        #[cfg(feature = "used")]
        args.poke_i32("nice").unwrap();
        #[cfg(feature = "used")]
        assert_eq!(args.all_used(), false);
        #[cfg(feature = "used")]
        assert_eq!(args.iter_used_name().collect::<Vec<&str>>(), ["nice"]);

        let mut args = Args::default();
        let mut name = String::new();
        name.push_str("henlo");
        args.insert_i32(name.as_str(), 56);
        #[cfg(feature = "used")]
        assert_eq!(args.poke_i32(name.as_str()).unwrap(), &56);
    }
}