observable_react/collections/
list.rs1use 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}