1#![feature(specialization, proc_macro_hygiene)]
2
3use js_sys::{Object, Reflect};
4use wasm_bindgen::JsValue;
5
6#[doc(hidden)]
7pub trait JsObjectValue__ {
8 fn js_object_set__(self, obj: &Object, key: &JsValue);
9}
10
11impl<T: Into<JsValue>> JsObjectValue__ for T {
12 #[inline(always)]
13 default fn js_object_set__(self, obj: &Object, key: &JsValue) {
14 let value = self.into();
15 Reflect::set(obj, key, &value).unwrap();
16 }
17}
18
19
20impl JsObjectValue__ for &JsValue {
21 #[inline(always)]
22 fn js_object_set__(self, obj: &Object, key: &JsValue) {
23 Reflect::set(obj, key, self).unwrap();
24 }
25}
26
27
28#[macro_export]
30macro_rules! js_object {
31 ($($key:expr, $value:expr),+) => {
32 {
33 use js_intern::{js_intern, try_js_intern};
34
35 let o = js_sys::Object::new();
36 $(
37 {
38 let k = js_intern!($key);
39 let v = try_js_intern!($value);
40 $crate::JsObjectValue__::js_object_set__(v, &o, k);
41 }
42 )*
43 o
44 }
45 };
46}
47