Merge pull request #9 from robinhundt/master

Use FromStr in default parser
This commit is contained in:
Temirkhan Myrzamadi 2020-09-05 19:12:49 +06:00 committed by GitHub
commit cbb1f39e7b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -67,15 +67,21 @@ pub fn impl_parse_args_named(
fn create_parser<'a>(
parser_type: &ParserType,
types: impl Iterator<Item = &'a Type>,
mut types: impl Iterator<Item = &'a Type>,
count_args: usize,
) -> quote::__private::TokenStream {
let function_to_parse = match parser_type {
ParserType::Default => match count_args {
1 => {
quote! { (|s: String| Ok((s,))) }
let ty = types.next().expect("count_args != types.len()");
quote! { (|s: String| {
let res = <#ty>::from_str(&s)
.map_err(|e|ParseError::IncorrectFormat({ let e: Box<dyn std::error::Error + Send + Sync + 'static> = e.into(); e }))?;
Ok((res, ))
})
}
}
_ => quote! { compile_error!("Expected 1 argument") },
_ => quote! { compile_error!("Expected exactly 1 argument") },
},
ParserType::Split { separator } => parser_with_separator(
&separator.clone().unwrap_or_else(|| " ".to_owned()),