Skip to content

Commit c19f519

Browse files
ali-behjatiReisen
authored andcommitted
Implement useful methods on PrefixedVec
1 parent c707e42 commit c19f519

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

pythnet/pythnet_sdk/src/wire/array.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ where
4747
type Value = [T; N];
4848

4949
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
50-
write!(formatter, "an array of length {}", N)
50+
write!(formatter, "an array of length {N}")
5151
}
5252

5353
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>

pythnet/pythnet_sdk/src/wire/prefixed_vec.rs

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use serde::{
1111
/// PrefixlessVec overrides the serialization to _not_ write a length prefix.
1212
#[derive(Clone, Debug, Hash, PartialEq, PartialOrd)]
1313
struct PrefixlessVec<T> {
14-
data: Vec<T>,
14+
inner: Vec<T>,
1515
}
1616

1717
impl<T> Serialize for PrefixlessVec<T>
@@ -21,7 +21,7 @@ where
2121
#[inline]
2222
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2323
let mut seq = serializer.serialize_seq(None)?;
24-
for item in &self.data {
24+
for item in &self.inner {
2525
seq.serialize_element(item)?;
2626
}
2727
seq.end()
@@ -75,7 +75,7 @@ where
7575
);
7676
}
7777

78-
Ok(PrefixlessVec { data })
78+
Ok(PrefixlessVec { inner: data })
7979
}
8080
}
8181

@@ -105,15 +105,36 @@ pub struct PrefixedVec<L, T> {
105105
data: PrefixlessVec<T>,
106106
}
107107

108-
impl<T, L> From<Vec<T>> for PrefixedVec<L, T> {
108+
impl<L, T> From<Vec<T>> for PrefixedVec<L, T> {
109109
fn from(data: Vec<T>) -> Self {
110110
Self {
111111
__phantom: std::marker::PhantomData,
112-
data: PrefixlessVec { data },
112+
data: PrefixlessVec { inner: data },
113113
}
114114
}
115115
}
116116

117+
impl<L, T> From<PrefixedVec<L, T>> for Vec<T> {
118+
fn from(data: PrefixedVec<L, T>) -> Self {
119+
data.data.inner
120+
}
121+
}
122+
123+
impl<L, T> IntoIterator for PrefixedVec<L, T> {
124+
type Item = T;
125+
type IntoIter = std::vec::IntoIter<Self::Item>;
126+
127+
fn into_iter(self) -> Self::IntoIter {
128+
self.data.inner.into_iter()
129+
}
130+
}
131+
132+
impl<L, T> PrefixedVec<L, T> {
133+
pub fn iter(&self) -> std::slice::Iter<T> {
134+
self.data.inner.iter()
135+
}
136+
}
137+
117138
impl<L, T> Serialize for PrefixedVec<L, T>
118139
where
119140
T: Serialize,
@@ -123,7 +144,7 @@ where
123144
{
124145
#[inline]
125146
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
126-
let len: L = L::try_from(self.data.data.len()).unwrap();
147+
let len: L = L::try_from(self.data.inner.len()).unwrap();
127148
let mut st = serializer.serialize_struct("SizedVec", 1)?;
128149
st.serialize_field("len", &len)?;
129150
st.serialize_field("data", &self.data)?;

0 commit comments

Comments
 (0)