diff --git a/src/lib.rs b/src/lib.rs index 266450dc0bc752c7e720448cc5534af689908723..57aeb2e3e3295f3dedaecc06dac0be24b6ac250e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -115,7 +115,7 @@ pub enum IpTo { } /// `$($Ident: Ident ($Ty) -> $Ty )*` -pub type Ips = HashMap<Ident, (Ident, Ty, Ty)>; +pub type Ips = HashMap<Ident, (Option<Ty>, Ty)>; /// `$($Ident: $Ty = $Expr < $Path,)*` pub type Ops = HashMap<Ident, (Ty, Expr, Path)>; diff --git a/src/parse.rs b/src/parse.rs index deac90026991af253df8eec921cb8daf11535f03..5ca477f3d36ee433a2c95cde5968dcf1793f1343 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -496,7 +496,7 @@ fn ips(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Ips> { bail!("expected Colon, found {:?}", tt); } - let mut ty_arg = syn::parse_type(&"()")?; + let mut ty_arg = None; let mut ty_ret = syn::parse_type(&"()")?; let _ = ::parse::delimited(&mut tts, DelimToken::Brace, |tts| { fields(&tts, |key, mut tts| { @@ -508,9 +508,9 @@ fn ips(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Ips> { } else { bail!("expected `fn` Ident, found {:?}", tt); } - ty_arg = ::parse::delimited(&mut tts, DelimToken::Paren, |tts| { + ty_arg = Some(::parse::delimited(&mut tts, DelimToken::Paren, |tts| { Ok(syn::parse_type(&format!("{}", quote!(#(#tts)*)))?) - })?; + })?); let tt = tts.peek().cloned(); let ty_ret: Result<Ty> = match tt { @@ -538,50 +538,8 @@ fn ips(tts: &mut Peekable<Iter<TokenTree>>) -> Result<Ips> { Some(&TokenTree::Token(Token::Comma)) => {} _ => bail!("expected Comma, found {:?}", tt), } - // Ok(()))?; - // - // - // let tt = tts.next(); - // if let Some(&TokenTree::Token(Token::Colon)) = tt { - // } else { - // bail!("expected Colon, found {:?}", tt); - // } - // - // let tt = tts.next(); - // let meth = - // if let Some(&TokenTree::Token(Token::Ident(ref id))) = tt { - // id - // } else { - // bail!("expected Ident, found {:?}", tt); - // }; - // - // //let ty_param: Result<Ty> = - // let ty_param = - // ::parse::delimited(&mut tts, DelimToken::Paren, |tts| { - // Ok(syn::parse_type(&format!("{}", quote!(#(#tts)*)))?) - // })?; - // - // - // let tt = tts.next(); - // // let ty_return: Result<Ty> = Ok(syn::parse_type(&"()")?); - // let ty_return: Result<Ty> = match tt { - // Some(&TokenTree::Token(Token::Comma)) => { - // tts.next(); - // Ok(syn::parse_type(&"()")?) - // } - // Some(&TokenTree::Token(Token::RArrow)) => { - // ::parse::ty(&TokenTree::Token(Token::Comma), &mut tts) - // } - // _ => bail!("expected `-> Type,' or `,` found {:?}", tt), - // }; - // - // //let tt = tts.next(); - // // if let Some(&TokenTree::Token(Token::Comma)) = tt { - // // } else { - // // bail!("expected Comma, found {:?}", tt); - // // }; - // - // ips.insert(ident.clone(), (meth.clone(), ty_param, ty_return?)); + + ips.insert(ident.clone(), (ty_arg, ty_ret)); } Ok(ips)