Re-export context_deserialize_derive inside context_deserialize (#7852)

Re-export `context_deserialize_derive` inside of `context_deserialize` so they are both available from the same interface, which matches how popular crates (like `serde`) handle this.

This also nests both crates inside a new `context_deserialize` directory which will make it easier to eventually spin out into a different repo (if/when) we decide to do that (plus I prefer it aesthetically).
This commit is contained in:
Mac L
2025-08-12 15:16:19 +10:00
committed by GitHub
parent 918121e313
commit 152f2bb2e4
21 changed files with 56 additions and 39 deletions

3
Cargo.lock generated
View File

@@ -1786,6 +1786,7 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
name = "context_deserialize" name = "context_deserialize"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"context_deserialize_derive",
"milhouse", "milhouse",
"serde", "serde",
"ssz_types", "ssz_types",
@@ -2603,7 +2604,6 @@ dependencies = [
"compare_fields", "compare_fields",
"compare_fields_derive", "compare_fields_derive",
"context_deserialize", "context_deserialize",
"context_deserialize_derive",
"derivative", "derivative",
"eth2_network_config", "eth2_network_config",
"ethereum_ssz", "ethereum_ssz",
@@ -9897,7 +9897,6 @@ dependencies = [
"compare_fields", "compare_fields",
"compare_fields_derive", "compare_fields_derive",
"context_deserialize", "context_deserialize",
"context_deserialize_derive",
"criterion", "criterion",
"derivative", "derivative",
"eth2_interop_keypairs", "eth2_interop_keypairs",

View File

@@ -48,8 +48,8 @@ members = [
"common/validator_dir", "common/validator_dir",
"common/warp_utils", "common/warp_utils",
"common/workspace_members", "common/workspace_members",
"consensus/context_deserialize", "consensus/context_deserialize/context_deserialize",
"consensus/context_deserialize_derive", "consensus/context_deserialize/context_deserialize_derive",
"consensus/fixed_bytes", "consensus/fixed_bytes",
"consensus/fork_choice", "consensus/fork_choice",
"consensus/int_to_bytes", "consensus/int_to_bytes",
@@ -123,8 +123,10 @@ clap_utils = { path = "common/clap_utils" }
compare_fields = { path = "common/compare_fields" } compare_fields = { path = "common/compare_fields" }
compare_fields_derive = { path = "common/compare_fields_derive" } compare_fields_derive = { path = "common/compare_fields_derive" }
console-subscriber = "0.4" console-subscriber = "0.4"
context_deserialize = { path = "consensus/context_deserialize" } context_deserialize = { path = "consensus/context_deserialize/context_deserialize", features = [
context_deserialize_derive = { path = "consensus/context_deserialize_derive" } "all",
] }
context_deserialize_derive = { path = "consensus/context_deserialize/context_deserialize_derive" }
criterion = "0.5" criterion = "0.5"
delay_map = "0.4" delay_map = "0.4"
deposit_contract = { path = "common/deposit_contract" } deposit_contract = { path = "common/deposit_contract" }

View File

@@ -1,9 +0,0 @@
[package]
name = "context_deserialize"
version = "0.1.0"
edition = "2021"
[dependencies]
milhouse = { workspace = true }
serde = { workspace = true }
ssz_types = { workspace = true }

View File

@@ -0,0 +1,17 @@
[package]
name = "context_deserialize"
version = "0.1.0"
edition = "2021"
[features]
default = ["derive"]
derive = ["dep:context_deserialize_derive"]
milhouse = ["dep:milhouse"]
ssz = ["dep:ssz_types"]
all = ["derive", "milhouse", "ssz"]
[dependencies]
context_deserialize_derive = { version = "0.1.0", path = "../context_deserialize_derive", optional = true }
milhouse = { workspace = true, optional = true }
serde = { workspace = true }
ssz_types = { workspace = true, optional = true }

View File

@@ -0,0 +1,7 @@
mod core;
#[cfg(feature = "milhouse")]
mod milhouse;
#[cfg(feature = "ssz")]
mod ssz;

View File

@@ -1,10 +1,13 @@
use crate::serde::de::Error;
use crate::ContextDeserialize; use crate::ContextDeserialize;
use serde::de::Deserializer; use serde::{
use serde::Deserialize; de::{Deserializer, Error},
use ssz_types::length::{Fixed, Variable}; Deserialize,
use ssz_types::typenum::Unsigned; };
use ssz_types::{Bitfield, FixedVector}; use ssz_types::{
length::{Fixed, Variable},
typenum::Unsigned,
Bitfield, FixedVector,
};
impl<'de, C, T, N> ContextDeserialize<'de, C> for FixedVector<T, N> impl<'de, C, T, N> ContextDeserialize<'de, C> for FixedVector<T, N>
where where

View File

@@ -1,8 +1,8 @@
pub mod impls; mod impls;
pub mod milhouse;
pub mod ssz_impls; #[cfg(feature = "derive")]
pub use context_deserialize_derive::context_deserialize;
extern crate serde;
use serde::de::Deserializer; use serde::de::Deserializer;
/// General-purpose deserialization trait that accepts extra context `C`. /// General-purpose deserialization trait that accepts extra context `C`.

View File

@@ -1,5 +1,4 @@
use context_deserialize::ContextDeserialize; use context_deserialize::{context_deserialize, ContextDeserialize};
use context_deserialize_derive::context_deserialize;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[test] #[test]

View File

@@ -1,7 +1,10 @@
[package] [package]
name = "types" name = "types"
version = "0.2.1" version = "0.2.1"
authors = ["Paul Hauner <paul@paulhauner.com>", "Age Manning <Age@AgeManning.com>"] authors = [
"Paul Hauner <paul@paulhauner.com>",
"Age Manning <Age@AgeManning.com>",
]
edition = { workspace = true } edition = { workspace = true }
[features] [features]
@@ -28,7 +31,6 @@ bls = { workspace = true }
compare_fields = { workspace = true } compare_fields = { workspace = true }
compare_fields_derive = { workspace = true } compare_fields_derive = { workspace = true }
context_deserialize = { workspace = true } context_deserialize = { workspace = true }
context_deserialize_derive = { workspace = true }
derivative = { workspace = true } derivative = { workspace = true }
eth2_interop_keypairs = { path = "../../common/eth2_interop_keypairs" } eth2_interop_keypairs = { path = "../../common/eth2_interop_keypairs" }
ethereum_hashing = { workspace = true } ethereum_hashing = { workspace = true }

View File

@@ -1,7 +1,7 @@
use crate::slot_data::SlotData; use crate::slot_data::SlotData;
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use crate::{Checkpoint, ForkName, Hash256, SignedRoot, Slot}; use crate::{Checkpoint, ForkName, Hash256, SignedRoot, Slot};
use context_deserialize_derive::context_deserialize; use context_deserialize::context_deserialize;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ssz_derive::{Decode, Encode}; use ssz_derive::{Decode, Encode};
use test_random_derive::TestRandom; use test_random_derive::TestRandom;

View File

@@ -1,7 +1,7 @@
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use crate::*; use crate::*;
use context_deserialize_derive::context_deserialize; use context_deserialize::context_deserialize;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ssz_derive::{Decode, Encode}; use ssz_derive::{Decode, Encode};
use test_random_derive::TestRandom; use test_random_derive::TestRandom;

View File

@@ -1,6 +1,6 @@
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use crate::{Epoch, ForkName, Hash256}; use crate::{Epoch, ForkName, Hash256};
use context_deserialize_derive::context_deserialize; use context_deserialize::context_deserialize;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ssz_derive::{Decode, Encode}; use ssz_derive::{Decode, Encode};
use test_random_derive::TestRandom; use test_random_derive::TestRandom;

View File

@@ -1,6 +1,6 @@
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use crate::{Epoch, ForkName}; use crate::{Epoch, ForkName};
use context_deserialize_derive::context_deserialize; use context_deserialize::context_deserialize;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ssz_derive::{Decode, Encode}; use ssz_derive::{Decode, Encode};

View File

@@ -1,6 +1,6 @@
use crate::test_utils::TestRandom; use crate::test_utils::TestRandom;
use crate::{ForkName, Hash256, SignedRoot}; use crate::{ForkName, Hash256, SignedRoot};
use context_deserialize_derive::context_deserialize; use context_deserialize::context_deserialize;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use ssz_derive::{Decode, Encode}; use ssz_derive::{Decode, Encode};

View File

@@ -287,8 +287,7 @@ pub use bls::{
AggregatePublicKey, AggregateSignature, Keypair, PublicKey, PublicKeyBytes, SecretKey, AggregatePublicKey, AggregateSignature, Keypair, PublicKey, PublicKeyBytes, SecretKey,
Signature, SignatureBytes, Signature, SignatureBytes,
}; };
pub use context_deserialize::ContextDeserialize; pub use context_deserialize::{context_deserialize, ContextDeserialize};
pub use context_deserialize_derive::context_deserialize;
pub use kzg::{KzgCommitment, KzgProof, VERSIONED_HASH_VERSION_KZG}; pub use kzg::{KzgCommitment, KzgProof, VERSIONED_HASH_VERSION_KZG};
pub use milhouse::{self, List, Vector}; pub use milhouse::{self, List, Vector};
pub use ssz_types::{typenum, typenum::Unsigned, BitList, BitVector, FixedVector, VariableList}; pub use ssz_types::{typenum, typenum::Unsigned, BitList, BitVector, FixedVector, VariableList};

View File

@@ -18,7 +18,6 @@ bls = { workspace = true }
compare_fields = { workspace = true } compare_fields = { workspace = true }
compare_fields_derive = { workspace = true } compare_fields_derive = { workspace = true }
context_deserialize = { workspace = true } context_deserialize = { workspace = true }
context_deserialize_derive = { workspace = true }
derivative = { workspace = true } derivative = { workspace = true }
eth2_network_config = { workspace = true } eth2_network_config = { workspace = true }
ethereum_ssz = { workspace = true } ethereum_ssz = { workspace = true }

View File

@@ -4,8 +4,7 @@ use super::*;
use crate::cases::common::{DecimalU128, DecimalU256, SszStaticType}; use crate::cases::common::{DecimalU128, DecimalU256, SszStaticType};
use crate::cases::ssz_static::{check_serialization, check_tree_hash}; use crate::cases::ssz_static::{check_serialization, check_tree_hash};
use crate::decode::{context_yaml_decode_file, log_file_access, snappy_decode_file}; use crate::decode::{context_yaml_decode_file, log_file_access, snappy_decode_file};
use context_deserialize::ContextDeserialize; use context_deserialize::{context_deserialize, ContextDeserialize};
use context_deserialize_derive::context_deserialize;
use serde::{de::Error as SerdeError, Deserialize, Deserializer}; use serde::{de::Error as SerdeError, Deserialize, Deserializer};
use ssz_derive::{Decode, Encode}; use ssz_derive::{Decode, Encode};
use tree_hash::TreeHash; use tree_hash::TreeHash;