broxus_util/
web.rs

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}