@@ -270,3 +270,51 @@ impl PropertyInfo {
270270 }
271271 }
272272}
273+
274+ #[ derive( Debug ) ]
275+ pub struct MethodInfo {
276+ pub id : i32 ,
277+ pub method_name : StringName ,
278+ pub class_name : ClassName ,
279+ pub return_type : PropertyInfo ,
280+ pub arguments : Vec < PropertyInfo > ,
281+ pub default_arguments : Vec < Variant > ,
282+ pub flags : global:: MethodFlags ,
283+ }
284+
285+ impl MethodInfo {
286+ pub fn method_sys ( & self ) -> sys:: GDExtensionMethodInfo {
287+ use crate :: obj:: EngineEnum as _;
288+
289+ let argument_count = self . arguments . len ( ) as u32 ;
290+ let argument_vec = self
291+ . arguments
292+ . iter ( )
293+ . map ( |arg| arg. property_sys ( ) )
294+ . collect :: < Vec < _ > > ( )
295+ . into_boxed_slice ( ) ;
296+
297+ let arguments = unsafe { ( * Box :: into_raw ( argument_vec) ) . as_mut_ptr ( ) } ;
298+
299+ let default_argument_count = self . default_arguments . len ( ) as u32 ;
300+ let default_argument_vec = self
301+ . default_arguments
302+ . iter ( )
303+ . map ( |arg| arg. var_sys ( ) )
304+ . collect :: < Vec < _ > > ( )
305+ . into_boxed_slice ( ) ;
306+
307+ let default_arguments = unsafe { ( * Box :: into_raw ( default_argument_vec) ) . as_mut_ptr ( ) } ;
308+
309+ sys:: GDExtensionMethodInfo {
310+ id : self . id ,
311+ name : self . method_name . string_sys ( ) ,
312+ return_value : self . return_type . property_sys ( ) ,
313+ argument_count,
314+ arguments,
315+ default_argument_count,
316+ default_arguments,
317+ flags : u32:: try_from ( self . flags . ord ( ) ) . expect ( "flags should be valid" ) ,
318+ }
319+ }
320+ }
0 commit comments