1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
#[macro_export] macro_rules! web_component { ($name:ident) => { paste::item! { #[wasm_bindgen::prelude::wasm_bindgen] pub fn [<components_web_ $name:lower _create>](attributes: NamedNodeMap) -> usize { let object = $name::create_component(attributes); unsafe { $crate::objects_register::OBJECTS_REGISTER.register_object(Box::new(object)) } } #[wasm_bindgen::prelude::wasm_bindgen] pub fn [<components_web_ $name:lower _update_field>](object: usize, name: String, value: String) { unsafe { let object = $crate::objects_register::OBJECTS_REGISTER.object(object); object.update_field(&name, &value); object.field_updated(&name); } } #[wasm_bindgen::prelude::wasm_bindgen] pub fn [<components_web_ $name:lower _get_data>](object: usize) -> String { unsafe { let object = $crate::objects_register::OBJECTS_REGISTER.object(object); object.get_data() } } #[wasm_bindgen::prelude::wasm_bindgen] pub fn [<components_web_ $name:lower _on_loaded>](object:usize, shadow_root:ShadowRoot) { unsafe { let object = $crate::objects_register::OBJECTS_REGISTER.object(object); object.on_loaded(shadow_root); } } } } } #[macro_export] macro_rules! template { ($name:ident) => { paste::item! { #[wasm_bindgen::prelude::wasm_bindgen] pub fn [<components_web_ $name:lower _template>]() -> String { include_str!("template.html").to_string() } } } } #[macro_export] macro_rules! package { () => { #[wasm_bindgen::prelude::wasm_bindgen] pub fn web_component_target_wasm() {} } } #[macro_export] macro_rules! update_field { ($self:ident, $name:ident, $value:ident $(,$property:ident)*) => { $( if $name == stringify!($property) { $self.$property = serde_json::from_str(&$value).unwrap(); } )* } }