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
71
72
73
74
75
76
mod to_js;
pub use to_js::*;
mod from_js;
pub use from_js::*;
mod option_like;
pub use option_like::*;
pub use Maybe::*;
pub use Nullable::*;
mod js_cast;
pub use js_cast::*;
pub use js_sys;
pub use convert_js_macros::ToJs;
#[path = "./internal/mod.rs"]
pub mod __internal;
#[macro_export]
macro_rules! jsv {
(undefined) => {
$crate::__internal::JsValue::UNDEFINED
};
(null) => {
$crate::__internal::JsValue::NULL
};
($v:literal) => {
$crate::__internal::JsValue::from($v)
};
({}) => {
$crate::js_sys::Object::new()
};
({ $( $k:tt $(: $v:expr)? ),+ $(,)? }) => {{
let __obj = $crate::__internal::JsObject::new();
$(
$crate::jsv!(@impl set_prop_and_check
__obj
($k)
$(: $v)?
);
)+
__obj.into_inner()
}};
(@impl set_prop_and_check $obj:ident ($k:tt) : $v:expr ) => {
$obj.set_prop(
&($crate::jsv!(@impl resolve_prop_key $k)),
&($v),
)
};
(@impl set_prop_and_check $obj:ident ($k:tt) ) => {
$obj.set_prop(
&($crate::jsv!(@impl resolve_prop_key $k)),
&($k),
)
};
(@impl resolve_prop_key $k:ident) => { stringify!($k) };
(@impl resolve_prop_key $k:literal) => { $k };
(@impl resolve_prop_key [$k:expr]) => { $crate::jsv!(# $k) };
(@impl resolve_prop_key $k:tt) => {
compile_error!(concat!("invalid syntax for js object property key: ", stringify!($k)))
};
([]) => {
$crate::js_sys::Array::new()
};
([ $($arr_item:expr),+ $(,)? ]) => {
$crate::js_sys::Array::from_iter([
$(
$crate::ToJs::to_js(&($arr_item))
),+
])
};
}