wsdom-core 0.0.1

for the wsdom crate
Documentation
use crate::{
    js::primitives::*,
    js::value::JsValue,
    serialize::{SerdeToJs, ToJs, UseInJsCode},
};

macro_rules! impl_use_in_js {
    ($name:ident) => {
        impl UseInJsCode for $name {
            fn serialize_to(&self, buf: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
                SerdeToJs(self).serialize_to(buf)
            }
        }
        impl ToJs<JsValue> for $name {}
    };
}

impl ToJs<JsBoolean> for bool {}
impl_use_in_js!(bool);
impl ToJs<JsString> for str {}
impl_use_in_js!(str);
impl<'a> UseInJsCode for &'a str {
    fn serialize_to(&self, buf: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        SerdeToJs(self).serialize_to(buf)
    }
}
impl<'a> ToJs<JsString> for &'a str {}
impl<'a> ToJs<JsValue> for &'a str {}

impl ToJs<JsNumber> for i8 {}
impl ToJs<JsNumber> for i16 {}
impl ToJs<JsNumber> for i32 {}
impl ToJs<JsNumber> for i64 {}
impl ToJs<JsNumber> for isize {}
impl ToJs<JsNumber> for u8 {}
impl ToJs<JsNumber> for u16 {}
impl ToJs<JsNumber> for u32 {}
impl ToJs<JsNumber> for u64 {}
impl ToJs<JsNumber> for usize {}
impl ToJs<JsNumber> for f32 {}
impl ToJs<JsNumber> for f64 {}

impl_use_in_js!(f64);
impl_use_in_js!(f32);
impl_use_in_js!(usize);
impl_use_in_js!(u64);
impl_use_in_js!(u32);
impl_use_in_js!(u16);
impl_use_in_js!(u8);
impl_use_in_js!(isize);
impl_use_in_js!(i64);
impl_use_in_js!(i32);
impl_use_in_js!(i16);
impl_use_in_js!(i8);