1 macro_rules! type_wrapper { 2 ( 3 $(#[$attr:meta])* 4 pub struct $name:ident { pub(crate) ty: $ty:ty, } 5 6 clone: $clone:ident, 7 delete: $delete:ident, 8 $(equal: $equal:ident,)? 9 ) => { 10 #[derive(Clone)] 11 $(#[$attr])* 12 pub struct $name { 13 pub(crate) ty: $ty, 14 } 15 16 impl From<$ty> for $name { 17 fn from(ty: $ty) -> Self { 18 $name { ty } 19 } 20 } 21 22 #[unsafe(no_mangle)] 23 pub extern "C" fn $clone(ty: &$name) -> Box<$name> { 24 Box::new(ty.clone()) 25 } 26 27 $( 28 #[unsafe(no_mangle)] 29 pub extern "C" fn $equal(a: &$name, b: &$name) -> bool { 30 a.ty == b.ty 31 } 32 )? 33 34 #[unsafe(no_mangle)] 35 pub extern "C" fn $delete(_ty: Option<Box<$name>>) {} 36 }; 37 } 38 39 mod component; 40 mod func; 41 mod instance; 42 mod module; 43 mod resource; 44 mod val; 45 46 pub use component::*; 47 pub use func::*; 48 pub use instance::*; 49 pub use module::*; 50 pub use resource::*; 51 pub use val::*; 52