Skip to main content

zinq_schema/value/
array.rs

1use std::fmt;
2
3#[derive(Debug, Clone, PartialEq)]
4#[cfg_attr(
5    feature = "serde",
6    derive(serde::Serialize, serde::Deserialize),
7    serde(transparent)
8)]
9pub struct Array(Vec<super::Value>);
10
11impl Array {
12    pub fn new() -> Self {
13        return Self(vec![]);
14    }
15
16    pub fn len(&self) -> usize {
17        return self.0.len();
18    }
19
20    pub fn push(&mut self, value: super::Value) {
21        self.0.push(value);
22    }
23
24    pub fn pop(&mut self) -> Option<super::Value> {
25        return self.0.pop();
26    }
27
28    pub fn append(&mut self, items: &mut Vec<super::Value>) {
29        self.0.append(items);
30    }
31}
32
33impl From<Vec<super::Value>> for Array {
34    fn from(value: Vec<super::Value>) -> Self {
35        return Self(value);
36    }
37}
38
39impl From<&[super::Value]> for Array {
40    fn from(value: &[super::Value]) -> Self {
41        return Self(value.to_vec());
42    }
43}
44
45impl Into<Vec<super::Value>> for Array {
46    fn into(self) -> Vec<super::Value> {
47        return self.0;
48    }
49}
50
51impl fmt::Display for Array {
52    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
53        write!(f, "[")?;
54
55        for (i, value) in self.0.iter().enumerate() {
56            write!(f, "{}", value)?;
57
58            if i < self.0.len() - 1 {
59                write!(f, ",")?;
60            }
61        }
62
63        return write!(f, "]");
64    }
65}
66
67impl IntoIterator for Array {
68    type IntoIter = std::vec::IntoIter<super::Value>;
69    type Item = super::Value;
70
71    fn into_iter(self) -> Self::IntoIter {
72        return self.0.into_iter();
73    }
74}
75
76impl<'a> IntoIterator for &'a Array {
77    type IntoIter = std::slice::Iter<'a, super::Value>;
78    type Item = &'a super::Value;
79
80    fn into_iter(self) -> Self::IntoIter {
81        return self.0.iter();
82    }
83}