@@ -65,6 +65,7 @@ pub(crate) struct ExportMethod {
65
65
pub ( crate ) struct ExportArgs {
66
66
pub ( crate ) optional_args : Option < usize > ,
67
67
pub ( crate ) rpc_mode : RpcMode ,
68
+ pub ( crate ) name_override : Option < String > ,
68
69
}
69
70
70
71
pub ( crate ) fn derive_methods ( item_impl : ItemImpl ) -> TokenStream2 {
@@ -82,7 +83,7 @@ pub(crate) fn derive_methods(item_impl: ItemImpl) -> TokenStream2 {
82
83
let sig_span = sig. ident . span ( ) ;
83
84
84
85
let name = sig. ident ;
85
- let name_string = name. to_string ( ) ;
86
+ let name_string = args . name_override . unwrap_or_else ( || name. to_string ( ) ) ;
86
87
let ret_span = sig. output . span ( ) ;
87
88
let ret_ty = match sig. output {
88
89
syn:: ReturnType :: Default => quote_spanned ! ( ret_span => ( ) ) ,
@@ -181,6 +182,7 @@ fn impl_gdnative_expose(ast: ItemImpl) -> (ItemImpl, ClassMethodExport) {
181
182
ImplItem :: Method ( mut method) => {
182
183
let mut export_args = None ;
183
184
let mut rpc = None ;
185
+ let mut name_override = None ;
184
186
185
187
let mut errors = vec ! [ ] ;
186
188
@@ -253,8 +255,9 @@ fn impl_gdnative_expose(ast: ItemImpl) -> (ItemImpl, ClassMethodExport) {
253
255
} ;
254
256
let path = last. ident . to_string ( ) ;
255
257
256
- // Match rpc mode
258
+ // Match optional export arguments
257
259
match path. as_str ( ) {
260
+ // rpc mode
258
261
"rpc" => {
259
262
let value = if let syn:: Lit :: Str ( lit_str) = lit {
260
263
lit_str. value ( )
@@ -281,17 +284,36 @@ fn impl_gdnative_expose(ast: ItemImpl) -> (ItemImpl, ClassMethodExport) {
281
284
) ) ;
282
285
return false ;
283
286
}
287
+ }
288
+ // name override
289
+ "name" => {
290
+ let value = if let syn:: Lit :: Str ( lit_str) = lit {
291
+ lit_str. value ( )
292
+ } else {
293
+ errors. push ( syn:: Error :: new (
294
+ last. span ( ) ,
295
+ "unexpected type for name value, expected Str" ,
296
+ ) ) ;
297
+ return false ;
298
+ } ;
284
299
300
+ if name_override. replace ( value) . is_some ( ) {
301
+ errors. push ( syn:: Error :: new (
302
+ last. span ( ) ,
303
+ "name was set more than once" ,
304
+ ) ) ;
305
+ return false ;
306
+ }
307
+ }
308
+ _ => {
309
+ let msg =
310
+ format ! ( "unknown option for export: `{}`" , path) ;
311
+ errors. push ( syn:: Error :: new ( last. span ( ) , msg) ) ;
285
312
return false ;
286
313
}
287
- _ => ( ) ,
288
314
}
289
-
290
- let msg = format ! ( "unknown option for export: `{}`" , path) ;
291
- errors. push ( syn:: Error :: new ( last. span ( ) , msg) ) ;
292
315
}
293
316
}
294
-
295
317
return false ;
296
318
}
297
319
}
@@ -340,6 +362,7 @@ fn impl_gdnative_expose(ast: ItemImpl) -> (ItemImpl, ClassMethodExport) {
340
362
341
363
export_args. optional_args = optional_args;
342
364
export_args. rpc_mode = rpc. unwrap_or ( RpcMode :: Disabled ) ;
365
+ export_args. name_override = name_override;
343
366
344
367
methods_to_export. push ( ExportMethod {
345
368
sig : method. sig . clone ( ) ,
0 commit comments