observable_react/collections/
list.rs

1use std::ops::Deref;
2
3use observable_rs::Pushable;
4use wasm_bindgen::JsValue;
5
6pub struct List<T>(Vec<T>);
7
8impl<T> Deref for List<T> {
9    type Target = Vec<T>;
10
11    fn deref(&self) -> &Self::Target {
12        &self.0
13    }
14}
15
16impl<T> Default for List<T> {
17    fn default() -> Self {
18        Self(Default::default())
19    }
20}
21
22impl<T> From<Vec<T>> for List<T> {
23    fn from(value: Vec<T>) -> Self {
24        Self(value)
25    }
26}
27
28impl<T> Pushable for List<T> {
29    type Value = T;
30
31    fn push(&mut self, value: Self::Value) {
32        self.0.push(value)
33    }
34}
35
36impl<T> From<&List<T>> for JsValue
37where
38    T: Into<JsValue> + Clone,
39{
40    fn from(value: &List<T>) -> Self {
41        let array = js_sys::Array::new();
42        for v in value.0.iter() {
43            let v = v.clone();
44            let v: JsValue = v.into();
45            array.push(&v);
46        }
47        array.into()
48    }
49}