Skip to content

Commit c655ac2

Browse files
authored
Add context_deserialize impl (#73)
* Add context_deserialize impl * Use new `context_deserialize` version
1 parent 2cc42ed commit c655ac2

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

Cargo.toml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ documentation = "https://docs.rs/ssz_types"
1010
keywords = ["ethereum"]
1111
categories = ["cryptography::cryptocurrencies"]
1212

13+
[features]
14+
default = ["ring"]
15+
ring = ["tree_hash/ring"]
16+
context_deserialize = ["dep:context_deserialize"]
17+
1318
[dependencies]
1419
tree_hash = { version = "0.11.0", default-features = false }
1520
ethereum_serde_utils = "0.8.0"
@@ -20,16 +25,13 @@ typenum = "1.12.0"
2025
smallvec = "1.8.0"
2126
arbitrary = { version = "1.0", features = ["derive"], optional = true }
2227
itertools = "0.14.0"
28+
context_deserialize = { version = "0.2", optional = true }
2329

2430
[dev-dependencies]
2531
criterion = "0.7.0"
2632
serde_json = "1.0.0"
2733
tree_hash_derive = "0.11.0"
2834

29-
[features]
30-
default = ["ring"]
31-
ring = ["tree_hash/ring"]
32-
3335
[[bench]]
3436
harness = false
3537
name = "encode_decode"

src/context_deserialize.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
use crate::{typenum::Unsigned, FixedVector};
2+
use context_deserialize::ContextDeserialize;
3+
use serde::de::{Deserializer, Error};
4+
5+
impl<'de, C, T, N> ContextDeserialize<'de, C> for FixedVector<T, N>
6+
where
7+
T: ContextDeserialize<'de, C>,
8+
N: Unsigned,
9+
C: Clone,
10+
{
11+
fn context_deserialize<D>(deserializer: D, context: C) -> Result<Self, D::Error>
12+
where
13+
D: Deserializer<'de>,
14+
{
15+
let vec = Vec::<T>::context_deserialize(deserializer, context)?;
16+
FixedVector::new(vec).map_err(|e| D::Error::custom(format!("{:?}", e)))
17+
}
18+
}

src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ pub mod serde_utils;
4343
mod tree_hash;
4444
mod variable_list;
4545

46+
#[cfg(feature = "context_deserialize")]
47+
mod context_deserialize;
48+
4649
pub use fixed_vector::FixedVector;
4750
pub use ssz::{BitList, BitVector, Bitfield};
4851
pub use typenum;

0 commit comments

Comments
 (0)