wext 0.7.2

web-sys extension traits, convenience functions and types
Documentation
macro_rules! impls {
    ($($names:ident : $( $tagss:ident $($flagss:literal)? ),* );+) => {
        pub mod short {
            crate::element_macros::impls!(impl_short_fn -> $($names : $( $tagss $($flagss)? ),* );+);
        }
        pub mod create_ext {
            use web_sys::wasm_bindgen::JsCast;
            crate::element_macros::impls!(impl_create_ext -> $($names : $( $tagss $($flagss)? ),* );+);
        }
    };
    ($mac:ident -> $name:ident : $( $tags:ident $($flags:literal)? ),*; $($names:ident : $( $tagss:ident $($flagss:literal)? ),* );+) => {
        crate::element_macros::impls!($mac -> $name : $( $tags $($flags)? ),*);
        crate::element_macros::impls!($mac -> $($names : $( $tagss $($flagss)? ),* );+);
    };
    ($mac:ident -> $name:ident : $( $tags:ident $($flags:literal)? ),*) => {
        crate::element_macros::$mac!($name : $( $tags $($flags)? ),*);
    };
}
pub(crate) use impls;

macro_rules! impl_create_ext {
    ($name:ident : ) => {};
    (fns -> $tag:ident $($flag:literal)?) => {
        paste::paste!{
            fn [< create_ $tag:snake >] () -> Self {
                use super::ThisExt;
                super::ThisBase::create(stringify!($tag)).dyn_into().unwrap()
            }
        }
    };
    (tests -> $tag:ident $($flag:literal)?) => {
        paste::paste!{
            #[wasm_bindgen_test::wasm_bindgen_test]
            fn [< test_ $tag:snake >]() {
                let _: This = This::[< create_ $tag:snake >]();
            }
        }
    };
    (fns -> $tag:ident $($flag:literal)?, $( $tags:ident $($flags:literal)? ),+) => {
        crate::element_macros::impl_create_ext!(fns -> $tag $($flag)?);
        crate::element_macros::impl_create_ext!(fns -> $( $tags $($flags)? ),+);
    };
    (tests -> $tag:ident $($flag:literal)?, $( $tags:ident $($flags:literal)? ),+) => {
        crate::element_macros::impl_create_ext!(tests -> $tag $($flag)?);
        crate::element_macros::impl_create_ext!(tests -> $( $tags $($flags)? ),+);
    };
    ($name:ident : $( $tags:ident $($flags:literal)? ),+) => {
        paste::paste!{
            pub trait [< $name CreateExt >]: JsCast {
                crate::element_macros::impl_create_ext!(fns -> $( $tags $($flags)? ),+);
            }
            impl [< $name CreateExt >] for web_sys::$name {}
            #[cfg(test)]
            pub mod [< test_ $name:snake >] {
                use super::[< $name CreateExt >];
                use web_sys::$name as This;
                crate::element_macros::impl_create_ext!(tests -> $( $tags $($flags)? ),+);
            }
        }
    }
}
pub(crate) use impl_create_ext;

macro_rules! impl_short_fn {
    ($name:ident : ) => {};
    ($name:ident : $tag:ident $flag:literal) => {};
    ($name:ident : $tag:ident) => {
        paste::paste!{
            pub fn [< $tag:snake>]() -> web_sys::$name {
                 use super::create_ext::*;
                 web_sys::$name::[< create _ $tag:snake >]()
            }
            #[cfg(test)]
            #[wasm_bindgen_test::wasm_bindgen_test]
            fn [<test_ $name:snake _ $tag:snake>]() {
                [< $tag:snake >] ();
            }
        }
    };
    ($name:ident : $tag:ident $($flag:literal)?, $( $tags:ident $($flags:literal)? ),+) => {
        crate::element_macros::impl_short_fn!($name: $tag $($flag)?);
        crate::element_macros::impl_short_fn!($name: $( $tags $($flags)? ),+);
    };
}
pub(crate) use impl_short_fn;