Skip to content

Commit a8db9c1

Browse files
committed
Feature gate context_deserialize impl
1 parent 6b5c003 commit a8db9c1

File tree

3 files changed

+27
-24
lines changed

3 files changed

+27
-24
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use crate::RuntimeVariableList;
2+
use context_deserialize::ContextDeserialize;
3+
use serde::{de::Error as DeError, Deserializer};
4+
5+
impl<'de, C, T> ContextDeserialize<'de, (C, usize)> for RuntimeVariableList<T>
6+
where
7+
T: ContextDeserialize<'de, C>,
8+
C: Clone,
9+
{
10+
fn context_deserialize<D>(deserializer: D, context: (C, usize)) -> Result<Self, D::Error>
11+
where
12+
D: Deserializer<'de>,
13+
{
14+
// First parse out a Vec<C> using the Vec<C> impl you already have.
15+
let vec: Vec<T> = Vec::context_deserialize(deserializer, context.0)?;
16+
let vec_len = vec.len();
17+
RuntimeVariableList::new(vec, context.1).map_err(|e| {
18+
DeError::custom(format!(
19+
"RuntimeVariableList length {} exceeds max_len {}: {e:?}",
20+
vec_len, context.1,
21+
))
22+
})
23+
}
24+
}

src/runtime_types/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#[cfg(feature = "context_deserialize")]
2+
mod context_deserialize;
13
mod runtime_fixed_vector;
24
mod runtime_variable_list;
35

src/runtime_types/runtime_variable_list.rs

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
use crate::Error;
2-
use context_deserialize::ContextDeserialize;
32
use educe::Educe;
4-
use serde::de::Error as DeError;
5-
use serde::{Deserialize, Deserializer, Serialize};
3+
use serde::{Deserialize, Serialize};
64
use ssz::Decode;
75
use std::fmt;
86
use std::fmt::Debug;
@@ -222,27 +220,6 @@ where
222220
}
223221
}
224222

225-
impl<'de, C, T> ContextDeserialize<'de, (C, usize)> for RuntimeVariableList<T>
226-
where
227-
T: ContextDeserialize<'de, C>,
228-
C: Clone,
229-
{
230-
fn context_deserialize<D>(deserializer: D, context: (C, usize)) -> Result<Self, D::Error>
231-
where
232-
D: Deserializer<'de>,
233-
{
234-
// first parse out a Vec<C> using the Vec<C> impl you already have
235-
let vec: Vec<T> = Vec::context_deserialize(deserializer, context.0)?;
236-
let vec_len = vec.len();
237-
RuntimeVariableList::new(vec, context.1).map_err(|e| {
238-
DeError::custom(format!(
239-
"RuntimeVariableList length {} exceeds max_len {}: {e:?}",
240-
vec_len, context.1,
241-
))
242-
})
243-
}
244-
}
245-
246223
impl<T: TreeHash> TreeHash for RuntimeVariableList<T> {
247224
fn tree_hash_type() -> tree_hash::TreeHashType {
248225
tree_hash::TreeHashType::List

0 commit comments

Comments
 (0)