@@ -429,3 +429,36 @@ impl MetaCallValue for MetaCallThrowable {
429
429
self . into_raw ( )
430
430
}
431
431
}
432
+ /// Just a Rust barrier made for easier polymorphism.
433
+ impl MetaCallValue for Box < dyn MetaCallValue > {
434
+ fn get_metacall_id ( ) -> metacall_value_id {
435
+ metacall_value_id:: METACALL_INVALID
436
+ }
437
+ fn from_metacall_raw_leak ( v : * mut c_void ) -> Result < Self , Box < dyn MetaCallValue > > {
438
+ Ok ( cast:: raw_to_metacallobj_untyped_leak ( v) )
439
+ }
440
+ fn into_metacall_raw ( self ) -> * mut c_void {
441
+ match_metacall_value ! ( self , {
442
+ bool : bool => bool . into_metacall_raw( ) ,
443
+ char : char => char . into_metacall_raw( ) ,
444
+ num: i16 => num. into_metacall_raw( ) ,
445
+ num: i32 => num. into_metacall_raw( ) ,
446
+ num: i64 => num. into_metacall_raw( ) ,
447
+ num: f32 => num. into_metacall_raw( ) ,
448
+ num: f64 => num. into_metacall_raw( ) ,
449
+ str : String => str . into_metacall_raw( ) ,
450
+ buf: Vec <i8 > => buf. into_metacall_raw( ) ,
451
+ arr: Vec <Box <dyn MetaCallValue >> => arr. into_metacall_raw( ) ,
452
+ map: HashMap <String , Box <dyn MetaCallValue >> => map. into_metacall_raw( ) ,
453
+ ptr: MetaCallPointer => ptr. into_metacall_raw( ) ,
454
+ fut: MetaCallFuture => fut. into_metacall_raw( ) ,
455
+ fun: MetaCallFunction => fun. into_metacall_raw( ) ,
456
+ null: MetaCallNull => null. into_metacall_raw( ) ,
457
+ cls: MetaCallClass => cls. into_metacall_raw( ) ,
458
+ obj: MetaCallObject => obj. into_metacall_raw( ) ,
459
+ exc: MetaCallException => exc. into_metacall_raw( ) ,
460
+ thr: MetaCallThrowable => thr. into_metacall_raw( ) ,
461
+ _ => MetaCallNull ( ) . into_metacall_raw( )
462
+ } )
463
+ }
464
+ }
0 commit comments