//! Checks that types like `::std::option::Option` are not special use structopt::StructOpt; #[rustversion::since(1.37)] #[test] fn special_types_bool() { mod inner { #[allow(non_camel_case_types)] #[derive(PartialEq, Debug)] pub struct bool(pub String); impl std::str::FromStr for self::bool { type Err = String; fn from_str(s: &str) -> Result { Ok(self::bool(s.into())) } } }; #[derive(StructOpt, PartialEq, Debug)] struct Opt { arg: inner::bool, } assert_eq!( Opt { arg: inner::bool("success".into()) }, Opt::from_iter(&["test", "success"]) ); } #[test] fn special_types_option() { fn parser(s: &str) -> Option { Some(s.to_string()) } #[derive(StructOpt, PartialEq, Debug)] struct Opt { #[structopt(parse(from_str = parser))] arg: ::std::option::Option, } assert_eq!( Opt { arg: Some("success".into()) }, Opt::from_iter(&["test", "success"]) ); } #[test] fn special_types_vec() { fn parser(s: &str) -> Vec { vec![s.to_string()] } #[derive(StructOpt, PartialEq, Debug)] struct Opt { #[structopt(parse(from_str = parser))] arg: ::std::vec::Vec, } assert_eq!( Opt { arg: vec!["success".into()] }, Opt::from_iter(&["test", "success"]) ); }