oxidize_pdf/objects/
array.rs

1use crate::objects::Object;
2
3#[derive(Debug, Clone)]
4pub struct Array {
5    elements: Vec<Object>,
6}
7
8impl Array {
9    pub fn new() -> Self {
10        Self {
11            elements: Vec::new(),
12        }
13    }
14
15    pub fn with_capacity(capacity: usize) -> Self {
16        Self {
17            elements: Vec::with_capacity(capacity),
18        }
19    }
20
21    pub fn push(&mut self, object: impl Into<Object>) {
22        self.elements.push(object.into());
23    }
24
25    pub fn pop(&mut self) -> Option<Object> {
26        self.elements.pop()
27    }
28
29    pub fn insert(&mut self, index: usize, object: impl Into<Object>) {
30        self.elements.insert(index, object.into());
31    }
32
33    pub fn remove(&mut self, index: usize) -> Object {
34        self.elements.remove(index)
35    }
36
37    pub fn get(&self, index: usize) -> Option<&Object> {
38        self.elements.get(index)
39    }
40
41    pub fn get_mut(&mut self, index: usize) -> Option<&mut Object> {
42        self.elements.get_mut(index)
43    }
44
45    pub fn len(&self) -> usize {
46        self.elements.len()
47    }
48
49    pub fn is_empty(&self) -> bool {
50        self.elements.is_empty()
51    }
52
53    pub fn clear(&mut self) {
54        self.elements.clear();
55    }
56
57    pub fn iter(&self) -> impl Iterator<Item = &Object> {
58        self.elements.iter()
59    }
60
61    pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut Object> {
62        self.elements.iter_mut()
63    }
64}
65
66impl Default for Array {
67    fn default() -> Self {
68        Self::new()
69    }
70}
71
72impl From<Vec<Object>> for Array {
73    fn from(elements: Vec<Object>) -> Self {
74        Self { elements }
75    }
76}
77
78impl From<Array> for Vec<Object> {
79    fn from(array: Array) -> Self {
80        array.elements
81    }
82}
83
84impl FromIterator<Object> for Array {
85    fn from_iter<T: IntoIterator<Item = Object>>(iter: T) -> Self {
86        Self {
87            elements: iter.into_iter().collect(),
88        }
89    }
90}
91
92#[cfg(test)]
93mod tests;