@@ -173,11 +173,11 @@ pub fn make_rpc_api(for_class: &Ident, rpcs: Vec<&FuncDefinition>) -> TokenStrea
173173 let collection_name = format_ident ! ( "__{for_class}RpcCollection" ) ;
174174
175175 let mut collection_impl_methods = TokenStream :: new ( ) ;
176- let mut rpc_builders = TokenStream :: new ( ) ;
177176 for rpc in rpcs {
177+ // TODO: Support functions with optional parameters
178+
178179 let rpc_name = rpc. rust_ident ( ) ;
179180 // TODO: is this an okay name?
180- let rpc_builder_name = format_ident ! ( "__RpcBuilder_{}" , rpc. rust_ident( ) ) ;
181181 let param_idents = & rpc. signature_info . param_idents ;
182182 let rpc_typed_args: TokenStream = param_idents
183183 . iter ( )
@@ -189,39 +189,15 @@ pub fn make_rpc_api(for_class: &Ident, rpcs: Vec<&FuncDefinition>) -> TokenStrea
189189 } )
190190 . collect ( ) ;
191191 let rpc_args = param_idents. iter ( ) . map ( |name| quote ! { #name } ) ;
192- let rpc_args_2 = rpc_args. clone ( ) ;
193- let rpc_self_args: TokenStream = param_idents
194- . iter ( )
195- . map ( |name| quote ! { self . #name, } )
196- . collect ( ) ;
197192
198193 collection_impl_methods. append_all ( quote ! {
199194 #[ must_use]
200- pub fn #rpc_name( self , #rpc_typed_args) -> #rpc_builder_name<' c> {
201- #rpc_builder_name {
202- object: self . object,
203- #( #rpc_args: #rpc_args. to_variant( ) ) , *
204- }
205- }
206- } ) ;
207-
208- rpc_builders. append_all ( quote ! {
209- #[ doc( hidden) ]
210- pub struct #rpc_builder_name<' c>
211- {
212- object: UserRpcObject <' c, #for_class>,
213- #( #rpc_args_2: Variant ) , *
214- }
215-
216- impl <' c> #rpc_builder_name<' c>
217- {
218- pub fn call( mut self ) {
219- self . object. call_rpc( stringify!( #rpc_name) , & [ #rpc_self_args] ) ;
220- }
221-
222- pub fn call_id( mut self , id: i64 ) {
223- self . object. call_rpc_id( stringify!( #rpc_name) , id, & [ #rpc_self_args] ) ;
224- }
195+ pub fn #rpc_name( self , #rpc_typed_args) -> GenericRpcBuilder <' c, #for_class> {
196+ GenericRpcBuilder :: new(
197+ self . object,
198+ stringify!( #rpc_name) ,
199+ vec![ #( #rpc_args. to_variant( ) ) , * ] ,
200+ )
225201 }
226202 } ) ;
227203 }
@@ -235,7 +211,7 @@ pub fn make_rpc_api(for_class: &Ident, rpcs: Vec<&FuncDefinition>) -> TokenStrea
235211 #![ allow( non_camel_case_types) ]
236212
237213 use super :: * ;
238- use :: godot:: obj:: { RpcCollection , UserRpcObject } ;
214+ use :: godot:: obj:: { RpcCollection , UserRpcObject , GenericRpcBuilder } ;
239215
240216 #[ doc( hidden) ]
241217 pub struct #collection_name<' c>
@@ -269,8 +245,6 @@ pub fn make_rpc_api(for_class: &Ident, rpcs: Vec<&FuncDefinition>) -> TokenStrea
269245 )
270246 }
271247 }
272-
273- #rpc_builders
274248 }
275249 }
276250}
0 commit comments