zinq_schema/value/
array.rs1use 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}