1mod to_js;
2pub use to_js::*;
3
4mod from_js;
5pub use from_js::*;
6
7mod option_like;
8pub use option_like::*;
9
10pub use Maybe::*;
11pub use Nullable::*;
12
13mod js_cast;
14pub use js_cast::*;
15
16pub use js_sys;
17
18pub use convert_js_macros::ToJs;
19
20#[path = "./internal/mod.rs"]
21pub mod __internal;
22
23#[macro_export]
24macro_rules! jsv {
25 (undefined) => {
26 $crate::__internal::JsValue::UNDEFINED
27 };
28 (null) => {
29 $crate::__internal::JsValue::NULL
30 };
31 ($v:literal) => {
32 $crate::__internal::JsValue::from($v)
33 };
34 ({}) => {
35 $crate::js_sys::Object::new()
36 };
37 ({ $( $k:tt $(: $v:expr)? ),+ $(,)? }) => {{
38 let __obj = $crate::__internal::JsObject::new();
39 $(
40 $crate::jsv!(@impl set_prop_and_check
41 __obj
42 ($k)
43 $(: $v)?
44 );
45 )+
46 __obj.into_inner()
47 }};
48 (@impl set_prop_and_check $obj:ident ($k:tt) : $v:expr ) => {
49 $obj.set_prop(
50 &($crate::jsv!(@impl resolve_prop_key $k)),
51 &($v),
52 )
53 };
54 (@impl set_prop_and_check $obj:ident ($k:tt) ) => {
55 $obj.set_prop(
56 &($crate::jsv!(@impl resolve_prop_key $k)),
57 &($k),
58 )
59 };
60 (@impl resolve_prop_key $k:ident) => { stringify!($k) };
61 (@impl resolve_prop_key $k:literal) => { $k };
62 (@impl resolve_prop_key [$k:expr]) => { $crate::jsv!(# $k) };
63 (@impl resolve_prop_key $k:tt) => {
64 compile_error!(concat!("invalid syntax for js object property key: ", stringify!($k)))
65 };
66 ([]) => {
67 $crate::js_sys::Array::new()
68 };
69 ([ $($arr_item:expr),+ $(,)? ]) => {
70 $crate::js_sys::Array::from_iter([
71 $(
72 $crate::ToJs::to_js(&($arr_item))
73 ),+
74 ])
75 };
76}