Skip to main content

neo_types/
array.rs

1use std::vec::Vec;
2
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6/// Neo N3 Array type
7#[derive(Debug, Clone, PartialEq, Eq)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9#[cfg_attr(
10    feature = "serde",
11    serde(bound(serialize = "T: Serialize", deserialize = "T: Deserialize<'de>"))
12)]
13pub struct NeoArray<T> {
14    data: Vec<T>,
15}
16
17impl<T> NeoArray<T> {
18    pub fn new() -> Self {
19        Self { data: Vec::new() }
20    }
21
22    pub fn with_capacity(capacity: usize) -> Self {
23        Self {
24            data: Vec::with_capacity(capacity),
25        }
26    }
27
28    pub fn from_vec(data: Vec<T>) -> Self {
29        Self { data }
30    }
31
32    pub fn push(&mut self, item: T) {
33        self.data.push(item);
34    }
35
36    pub fn pop(&mut self) -> Option<T> {
37        self.data.pop()
38    }
39
40    pub fn len(&self) -> usize {
41        self.data.len()
42    }
43
44    pub fn is_empty(&self) -> bool {
45        self.data.is_empty()
46    }
47
48    pub fn get(&self, index: usize) -> Option<&T> {
49        self.data.get(index)
50    }
51
52    pub fn get_mut(&mut self, index: usize) -> Option<&mut T> {
53        self.data.get_mut(index)
54    }
55
56    pub fn iter(&self) -> impl Iterator<Item = &T> {
57        self.data.iter()
58    }
59}
60
61impl<T> Default for NeoArray<T> {
62    fn default() -> Self {
63        Self::new()
64    }
65}
66
67impl<T> From<Vec<T>> for NeoArray<T> {
68    fn from(data: Vec<T>) -> Self {
69        Self { data }
70    }
71}
72
73impl<T> FromIterator<T> for NeoArray<T> {
74    fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self {
75        Self {
76            data: Vec::from_iter(iter),
77        }
78    }
79}
80
81impl<T> Extend<T> for NeoArray<T> {
82    fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I) {
83        self.data.extend(iter);
84    }
85}
86
87impl<T: PartialEq> PartialEq<Vec<T>> for NeoArray<T> {
88    fn eq(&self, other: &Vec<T>) -> bool {
89        self.data == *other
90    }
91}
92
93impl<T: PartialEq> PartialEq<NeoArray<T>> for Vec<T> {
94    fn eq(&self, other: &NeoArray<T>) -> bool {
95        *self == other.data
96    }
97}