1use wasm_bindgen::{JsCast, JsValue};
2
3impl<T, E> HandleError for Result<T, E>
4where
5 E: ToString,
6{
7 type Output = T;
8
9 fn handle_error(self) -> Result<Self::Output, JsValue> {
10 self.map_err(|e| {
11 let error = e.to_string();
12 js_sys::Error::new(&error).unchecked_into()
13 })
14 }
15}
16
17pub trait HandleError {
18 type Output;
19
20 fn handle_error(self) -> Result<Self::Output, JsValue>;
21}
22
23pub struct ObjectBuilder {
24 object: js_sys::Object,
25}
26
27impl ObjectBuilder {
28 pub fn new() -> Self {
29 Self {
30 object: js_sys::Object::new(),
31 }
32 }
33
34 pub fn set<T>(self, key: &str, value: T) -> Self
35 where
36 JsValue: From<T>,
37 {
38 let key = JsValue::from_str(key);
39 let value = JsValue::from(value);
40 js_sys::Reflect::set(&self.object, &key, &value).expect("shouldn't fail");
41 self
42 }
43
44 pub fn build(self) -> JsValue {
45 JsValue::from(self.object)
46 }
47}
48
49impl Default for ObjectBuilder {
50 fn default() -> Self {
51 Self::new()
52 }
53}