@@ -36,7 +36,7 @@ pub fn rpc(attr_args: TokenStream, decorated: TokenStream) -> TokenStream {
3636    let  attr_args:  AttributeArgs  = parse_macro_input ! ( attr_args) ; 
3737    let  attr_args = extract_attrs ( & attr_args) ; 
3838    let  method_name = attr_args. method_name . unwrap_or ( fn_name. to_string ( ) ) ; 
39-     let  input_infos  = extract_input_info ( inputs,  & attr_args. ignore_inputs ) ; 
39+     let  input_info  = extract_input_info ( inputs,  & attr_args. ignore_inputs ) ; 
4040    let  output = & input. sig . output ; 
4141    let  output_info = extract_output_info ( output. clone ( ) ) ; 
4242
@@ -51,11 +51,14 @@ pub fn rpc(attr_args: TokenStream, decorated: TokenStream) -> TokenStream {
5151        fn_name. span ( ) , 
5252    ) ; 
5353
54-     let  input_types:  Vec < Type >  = input_infos. iter ( ) . map ( |( _,  typ,  _) | typ. clone ( ) ) . collect ( ) ; 
55-     let  input_schemas:  Vec < TokenStream2 >  = input_infos
56-         . iter ( ) 
54+     let  input_type:  Type  = input_info
55+         . as_ref ( ) 
56+         . map ( |( _,  typ,  _) | typ. clone ( ) ) 
57+         . unwrap_or ( parse_quote ! ( [ u8 ;  0 ] ) ) ; 
58+     let  input_schema:  TokenStream2  = input_info
59+         . as_ref ( ) 
5760        . map ( |( _,  _,  schema) | schema. clone ( ) ) 
58-         . collect ( ) ; 
61+         . unwrap_or ( parse_quote ! ( None ) ) ; 
5962
6063    let  output_type:  Type  = output_info
6164        . as_ref ( ) 
@@ -66,10 +69,6 @@ pub fn rpc(attr_args: TokenStream, decorated: TokenStream) -> TokenStream {
6669        . map ( |( _,  _,  schema) | schema. clone ( ) ) 
6770        . unwrap_or ( parse_quote ! ( None ) ) ; 
6871
69-     let  default_input = parse_quote ! ( [ u8 ;  0 ] ) ; 
70-     let  input_type = input_types. first ( ) . unwrap_or ( & default_input) ; 
71-     let  default_schema = parse_quote ! ( None ) ; 
72-     let  input_schema = input_schemas. first ( ) . unwrap_or ( & default_schema) ; 
7372    TokenStream :: from ( quote !  { 
7473        #input
7574
@@ -169,7 +168,10 @@ fn extract_attrs(attrs: &[NestedMeta]) -> Args {
169168
170169            if  nv. path . is_ident ( "ignore" )  { 
171170                if  let  Lit :: Str ( lit)  = & nv. lit  { 
172-                     args. ignore_inputs . push ( lit. value ( ) ) ; 
171+                     let  value = lit. value ( ) ; 
172+                     for  item in  value. split ( ',' ) . map ( |s| s. trim ( ) ) . filter ( |s| !s. is_empty ( ) )  { 
173+                         args. ignore_inputs . push ( item. to_string ( ) ) ; 
174+                     } 
173175                } 
174176            } 
175177        } 
@@ -181,8 +183,8 @@ fn extract_attrs(attrs: &[NestedMeta]) -> Args {
181183fn  extract_input_info ( 
182184    inputs :  & syn:: punctuated:: Punctuated < FnArg ,  syn:: token:: Comma > , 
183185    ignore_inputs :  & [ String ] , 
184- )  -> Vec < ( String ,  Type ,  TokenStream2 ) >  { 
185-     inputs
186+ )  -> Option < ( String ,  Type ,  TokenStream2 ) >  { 
187+     let  collected :   Vec < ( String ,   Type ,   TokenStream2 ) >  =  inputs
186188        . iter ( ) 
187189        . filter_map ( |arg| { 
188190            if  let  FnArg :: Typed ( PatType  {  pat,  ty,  .. } )  = arg { 
@@ -202,7 +204,13 @@ fn extract_input_info(
202204                None 
203205            } 
204206        } ) 
205-         . collect ( ) 
207+         . collect ( ) ; 
208+ 
209+     if  collected. len ( )  > 1  { 
210+         panic ! ( "Expected at most one input, got {}" ,  collected. len( ) ) ; 
211+     } 
212+ 
213+     collected. into_iter ( ) . next ( ) 
206214} 
207215
208216fn  extract_output_info ( output :  ReturnType )  -> Option < ( String ,  Type ,  TokenStream2 ) >  { 
0 commit comments