whisky_js/models/
js_vec.rs

1use crate::*;
2use serde::{Deserialize, Serialize};
3
4#[wasm_bindgen]
5#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd, Default, Serialize, Deserialize)]
6pub struct JsVecString(Vec<String>);
7
8#[wasm_bindgen]
9impl JsVecString {
10    pub fn new() -> Self {
11        Self(Vec::new())
12    }
13
14    pub fn len(&self) -> usize {
15        self.0.len()
16    }
17
18    pub fn is_empty(&self) -> bool {
19        self.len() == 0
20    }
21
22    pub fn get(&self, index: usize) -> String {
23        self.0[index].clone()
24    }
25
26    pub fn add(&mut self, elem: String) {
27        self.0.push(elem.clone());
28    }
29
30    pub fn into_vec(self) -> Vec<String> {
31        self.0
32    }
33
34    pub(crate) fn as_ref_vec(&self) -> &Vec<String> {
35        &self.0
36    }
37}
38
39impl IntoIterator for JsVecString {
40    type Item = String;
41    type IntoIter = std::vec::IntoIter<String>;
42
43    fn into_iter(self) -> Self::IntoIter {
44        self.0.into_iter()
45    }
46}
47
48impl<'a> IntoIterator for &'a JsVecString {
49    type Item = &'a String;
50    type IntoIter = std::slice::Iter<'a, String>;
51
52    fn into_iter(self) -> Self::IntoIter {
53        self.0.iter()
54    }
55}
56
57impl JsVecString {
58    pub fn iter(&self) -> std::slice::Iter<String> {
59        self.0.iter()
60    }
61}