web-component 0.1.5

A library for easily creating Web Components.
Documentation
#[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();
            }
        )*
    }
}