ag_grid_core/
imports.rs

1use js_sys::Object;
2use wasm_bindgen::{prelude::*, JsCast};
3
4#[wasm_bindgen]
5extern "C" {
6    #[wasm_bindgen(extends = Object)]
7    pub type ObjectExt;
8
9    #[wasm_bindgen(method, indexing_setter)]
10    pub fn set(this: &ObjectExt, key: &str, value: JsValue);
11
12    #[wasm_bindgen(method, indexing_getter)]
13    pub fn get(this: &ObjectExt, key: &str) -> JsValue;
14}
15
16impl ObjectExt {
17    pub fn new() -> Self {
18        Object::new().unchecked_into::<Self>()
19    }
20
21    pub fn get_string_unchecked<T: AsRef<str>>(&self, key: T) -> String {
22        self.get(key.as_ref()).as_string().unwrap()
23    }
24
25    pub fn get_string<T: AsRef<str>>(&self, key: T) -> Option<String> {
26        self.get(key.as_ref()).as_string()
27    }
28
29    pub fn get_f64_unchecked<T: AsRef<str>>(&self, key: T) -> f64 {
30        self.get(key.as_ref()).as_f64().unwrap()
31    }
32
33    pub fn get_f64<T: AsRef<str>>(&self, key: T) -> Option<f64> {
34        self.get(key.as_ref()).as_f64()
35    }
36
37    pub fn entries(&self) -> Vec<(String, JsValue)> {
38        Object::entries(self)
39            .iter()
40            .map(|pair| {
41                let pair = pair.unchecked_into::<js_sys::Array>();
42                (pair.get(0).as_string().unwrap(), pair.get(1))
43            })
44            .collect()
45    }
46
47    pub fn keys(&self) -> Vec<String> {
48        Object::keys(self)
49            .iter()
50            .map(|v| {
51                // Safe to unwrap because object keys are always strings
52                v.as_string().unwrap()
53            })
54            .collect()
55    }
56
57    pub fn values(&self) -> Vec<JsValue> {
58        Object::values(self).iter().collect()
59    }
60}
61
62impl Default for ObjectExt {
63    fn default() -> Self {
64        Self::new()
65    }
66}
67
68#[wasm_bindgen]
69extern "C" {
70    #[wasm_bindgen(js_namespace = console)]
71    pub fn log(v: &str);
72}