From 152f2bb2e46cd4992e78f5e9a354392cfa71cdbf Mon Sep 17 00:00:00 2001 From: Mac L Date: Tue, 12 Aug 2025 15:16:19 +1000 Subject: [PATCH] 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). --- Cargo.lock | 3 +-- Cargo.toml | 10 ++++++---- consensus/context_deserialize/Cargo.toml | 9 --------- .../context_deserialize/Cargo.toml | 17 +++++++++++++++++ .../src/impls/core.rs} | 0 .../src/impls}/milhouse.rs | 0 .../context_deserialize/src/impls/mod.rs | 7 +++++++ .../src/impls/ssz.rs} | 15 +++++++++------ .../{ => context_deserialize}/src/lib.rs | 8 ++++---- .../context_deserialize_derive/Cargo.toml | 0 .../context_deserialize_derive/src/lib.rs | 0 .../tests/context_deserialize_derive.rs | 3 +-- consensus/types/Cargo.toml | 6 ++++-- consensus/types/src/attestation_data.rs | 2 +- consensus/types/src/beacon_block_header.rs | 2 +- consensus/types/src/checkpoint.rs | 2 +- consensus/types/src/fork.rs | 2 +- consensus/types/src/fork_data.rs | 2 +- consensus/types/src/lib.rs | 3 +-- testing/ef_tests/Cargo.toml | 1 - testing/ef_tests/src/cases/ssz_generic.rs | 3 +-- 21 files changed, 56 insertions(+), 39 deletions(-) delete mode 100644 consensus/context_deserialize/Cargo.toml create mode 100644 consensus/context_deserialize/context_deserialize/Cargo.toml rename consensus/context_deserialize/{src/impls.rs => context_deserialize/src/impls/core.rs} (100%) rename consensus/context_deserialize/{src => context_deserialize/src/impls}/milhouse.rs (100%) create mode 100644 consensus/context_deserialize/context_deserialize/src/impls/mod.rs rename consensus/context_deserialize/{src/ssz_impls.rs => context_deserialize/src/impls/ssz.rs} (85%) rename consensus/context_deserialize/{ => context_deserialize}/src/lib.rs (74%) rename consensus/{ => context_deserialize}/context_deserialize_derive/Cargo.toml (100%) rename consensus/{ => context_deserialize}/context_deserialize_derive/src/lib.rs (100%) rename consensus/{ => context_deserialize}/context_deserialize_derive/tests/context_deserialize_derive.rs (96%) diff --git a/Cargo.lock b/Cargo.lock index 4dc0971841..8073071a61 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1786,6 +1786,7 @@ checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" name = "context_deserialize" version = "0.1.0" dependencies = [ + "context_deserialize_derive", "milhouse", "serde", "ssz_types", @@ -2603,7 +2604,6 @@ dependencies = [ "compare_fields", "compare_fields_derive", "context_deserialize", - "context_deserialize_derive", "derivative", "eth2_network_config", "ethereum_ssz", @@ -9897,7 +9897,6 @@ dependencies = [ "compare_fields", "compare_fields_derive", "context_deserialize", - "context_deserialize_derive", "criterion", "derivative", "eth2_interop_keypairs", diff --git a/Cargo.toml b/Cargo.toml index 33b79f3518..c2eb868b76 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,8 +48,8 @@ members = [ "common/validator_dir", "common/warp_utils", "common/workspace_members", - "consensus/context_deserialize", - "consensus/context_deserialize_derive", + "consensus/context_deserialize/context_deserialize", + "consensus/context_deserialize/context_deserialize_derive", "consensus/fixed_bytes", "consensus/fork_choice", "consensus/int_to_bytes", @@ -123,8 +123,10 @@ clap_utils = { path = "common/clap_utils" } compare_fields = { path = "common/compare_fields" } compare_fields_derive = { path = "common/compare_fields_derive" } console-subscriber = "0.4" -context_deserialize = { path = "consensus/context_deserialize" } -context_deserialize_derive = { path = "consensus/context_deserialize_derive" } +context_deserialize = { path = "consensus/context_deserialize/context_deserialize", features = [ + "all", +] } +context_deserialize_derive = { path = "consensus/context_deserialize/context_deserialize_derive" } criterion = "0.5" delay_map = "0.4" deposit_contract = { path = "common/deposit_contract" } diff --git a/consensus/context_deserialize/Cargo.toml b/consensus/context_deserialize/Cargo.toml deleted file mode 100644 index 30dae76136..0000000000 --- a/consensus/context_deserialize/Cargo.toml +++ /dev/null @@ -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 } diff --git a/consensus/context_deserialize/context_deserialize/Cargo.toml b/consensus/context_deserialize/context_deserialize/Cargo.toml new file mode 100644 index 0000000000..0e4a97b9ae --- /dev/null +++ b/consensus/context_deserialize/context_deserialize/Cargo.toml @@ -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 } diff --git a/consensus/context_deserialize/src/impls.rs b/consensus/context_deserialize/context_deserialize/src/impls/core.rs similarity index 100% rename from consensus/context_deserialize/src/impls.rs rename to consensus/context_deserialize/context_deserialize/src/impls/core.rs diff --git a/consensus/context_deserialize/src/milhouse.rs b/consensus/context_deserialize/context_deserialize/src/impls/milhouse.rs similarity index 100% rename from consensus/context_deserialize/src/milhouse.rs rename to consensus/context_deserialize/context_deserialize/src/impls/milhouse.rs diff --git a/consensus/context_deserialize/context_deserialize/src/impls/mod.rs b/consensus/context_deserialize/context_deserialize/src/impls/mod.rs new file mode 100644 index 0000000000..0225c5e031 --- /dev/null +++ b/consensus/context_deserialize/context_deserialize/src/impls/mod.rs @@ -0,0 +1,7 @@ +mod core; + +#[cfg(feature = "milhouse")] +mod milhouse; + +#[cfg(feature = "ssz")] +mod ssz; diff --git a/consensus/context_deserialize/src/ssz_impls.rs b/consensus/context_deserialize/context_deserialize/src/impls/ssz.rs similarity index 85% rename from consensus/context_deserialize/src/ssz_impls.rs rename to consensus/context_deserialize/context_deserialize/src/impls/ssz.rs index e989d67b29..26813a96fb 100644 --- a/consensus/context_deserialize/src/ssz_impls.rs +++ b/consensus/context_deserialize/context_deserialize/src/impls/ssz.rs @@ -1,10 +1,13 @@ -use crate::serde::de::Error; use crate::ContextDeserialize; -use serde::de::Deserializer; -use serde::Deserialize; -use ssz_types::length::{Fixed, Variable}; -use ssz_types::typenum::Unsigned; -use ssz_types::{Bitfield, FixedVector}; +use serde::{ + de::{Deserializer, Error}, + Deserialize, +}; +use ssz_types::{ + length::{Fixed, Variable}, + typenum::Unsigned, + Bitfield, FixedVector, +}; impl<'de, C, T, N> ContextDeserialize<'de, C> for FixedVector where diff --git a/consensus/context_deserialize/src/lib.rs b/consensus/context_deserialize/context_deserialize/src/lib.rs similarity index 74% rename from consensus/context_deserialize/src/lib.rs rename to consensus/context_deserialize/context_deserialize/src/lib.rs index 9de819247b..e5f2bfdba3 100644 --- a/consensus/context_deserialize/src/lib.rs +++ b/consensus/context_deserialize/context_deserialize/src/lib.rs @@ -1,8 +1,8 @@ -pub mod impls; -pub mod milhouse; -pub mod ssz_impls; +mod impls; + +#[cfg(feature = "derive")] +pub use context_deserialize_derive::context_deserialize; -extern crate serde; use serde::de::Deserializer; /// General-purpose deserialization trait that accepts extra context `C`. diff --git a/consensus/context_deserialize_derive/Cargo.toml b/consensus/context_deserialize/context_deserialize_derive/Cargo.toml similarity index 100% rename from consensus/context_deserialize_derive/Cargo.toml rename to consensus/context_deserialize/context_deserialize_derive/Cargo.toml diff --git a/consensus/context_deserialize_derive/src/lib.rs b/consensus/context_deserialize/context_deserialize_derive/src/lib.rs similarity index 100% rename from consensus/context_deserialize_derive/src/lib.rs rename to consensus/context_deserialize/context_deserialize_derive/src/lib.rs diff --git a/consensus/context_deserialize_derive/tests/context_deserialize_derive.rs b/consensus/context_deserialize/context_deserialize_derive/tests/context_deserialize_derive.rs similarity index 96% rename from consensus/context_deserialize_derive/tests/context_deserialize_derive.rs rename to consensus/context_deserialize/context_deserialize_derive/tests/context_deserialize_derive.rs index d6883400e0..8fb46da9c6 100644 --- a/consensus/context_deserialize_derive/tests/context_deserialize_derive.rs +++ b/consensus/context_deserialize/context_deserialize_derive/tests/context_deserialize_derive.rs @@ -1,5 +1,4 @@ -use context_deserialize::ContextDeserialize; -use context_deserialize_derive::context_deserialize; +use context_deserialize::{context_deserialize, ContextDeserialize}; use serde::{Deserialize, Serialize}; #[test] diff --git a/consensus/types/Cargo.toml b/consensus/types/Cargo.toml index 50ca1835d0..aa0df818d4 100644 --- a/consensus/types/Cargo.toml +++ b/consensus/types/Cargo.toml @@ -1,7 +1,10 @@ [package] name = "types" version = "0.2.1" -authors = ["Paul Hauner ", "Age Manning "] +authors = [ + "Paul Hauner ", + "Age Manning ", +] edition = { workspace = true } [features] @@ -28,7 +31,6 @@ bls = { workspace = true } compare_fields = { workspace = true } compare_fields_derive = { workspace = true } context_deserialize = { workspace = true } -context_deserialize_derive = { workspace = true } derivative = { workspace = true } eth2_interop_keypairs = { path = "../../common/eth2_interop_keypairs" } ethereum_hashing = { workspace = true } diff --git a/consensus/types/src/attestation_data.rs b/consensus/types/src/attestation_data.rs index 26ca5f1aec..a4643e5474 100644 --- a/consensus/types/src/attestation_data.rs +++ b/consensus/types/src/attestation_data.rs @@ -1,7 +1,7 @@ use crate::slot_data::SlotData; use crate::test_utils::TestRandom; use crate::{Checkpoint, ForkName, Hash256, SignedRoot, Slot}; -use context_deserialize_derive::context_deserialize; +use context_deserialize::context_deserialize; use serde::{Deserialize, Serialize}; use ssz_derive::{Decode, Encode}; use test_random_derive::TestRandom; diff --git a/consensus/types/src/beacon_block_header.rs b/consensus/types/src/beacon_block_header.rs index 7cdbd2eee1..e14a9fc8af 100644 --- a/consensus/types/src/beacon_block_header.rs +++ b/consensus/types/src/beacon_block_header.rs @@ -1,7 +1,7 @@ use crate::test_utils::TestRandom; use crate::*; -use context_deserialize_derive::context_deserialize; +use context_deserialize::context_deserialize; use serde::{Deserialize, Serialize}; use ssz_derive::{Decode, Encode}; use test_random_derive::TestRandom; diff --git a/consensus/types/src/checkpoint.rs b/consensus/types/src/checkpoint.rs index 2bb1df51c0..545af59985 100644 --- a/consensus/types/src/checkpoint.rs +++ b/consensus/types/src/checkpoint.rs @@ -1,6 +1,6 @@ use crate::test_utils::TestRandom; use crate::{Epoch, ForkName, Hash256}; -use context_deserialize_derive::context_deserialize; +use context_deserialize::context_deserialize; use serde::{Deserialize, Serialize}; use ssz_derive::{Decode, Encode}; use test_random_derive::TestRandom; diff --git a/consensus/types/src/fork.rs b/consensus/types/src/fork.rs index 19a137b108..5c5bd7ffd1 100644 --- a/consensus/types/src/fork.rs +++ b/consensus/types/src/fork.rs @@ -1,6 +1,6 @@ use crate::test_utils::TestRandom; use crate::{Epoch, ForkName}; -use context_deserialize_derive::context_deserialize; +use context_deserialize::context_deserialize; use serde::{Deserialize, Serialize}; use ssz_derive::{Decode, Encode}; diff --git a/consensus/types/src/fork_data.rs b/consensus/types/src/fork_data.rs index 7a4c07528a..2d5e905efb 100644 --- a/consensus/types/src/fork_data.rs +++ b/consensus/types/src/fork_data.rs @@ -1,6 +1,6 @@ use crate::test_utils::TestRandom; use crate::{ForkName, Hash256, SignedRoot}; -use context_deserialize_derive::context_deserialize; +use context_deserialize::context_deserialize; use serde::{Deserialize, Serialize}; use ssz_derive::{Decode, Encode}; diff --git a/consensus/types/src/lib.rs b/consensus/types/src/lib.rs index f0555a06d6..7425367f10 100644 --- a/consensus/types/src/lib.rs +++ b/consensus/types/src/lib.rs @@ -287,8 +287,7 @@ pub use bls::{ AggregatePublicKey, AggregateSignature, Keypair, PublicKey, PublicKeyBytes, SecretKey, Signature, SignatureBytes, }; -pub use context_deserialize::ContextDeserialize; -pub use context_deserialize_derive::context_deserialize; +pub use context_deserialize::{context_deserialize, ContextDeserialize}; pub use kzg::{KzgCommitment, KzgProof, VERSIONED_HASH_VERSION_KZG}; pub use milhouse::{self, List, Vector}; pub use ssz_types::{typenum, typenum::Unsigned, BitList, BitVector, FixedVector, VariableList}; diff --git a/testing/ef_tests/Cargo.toml b/testing/ef_tests/Cargo.toml index f6d6837f71..50007f9160 100644 --- a/testing/ef_tests/Cargo.toml +++ b/testing/ef_tests/Cargo.toml @@ -18,7 +18,6 @@ bls = { workspace = true } compare_fields = { workspace = true } compare_fields_derive = { workspace = true } context_deserialize = { workspace = true } -context_deserialize_derive = { workspace = true } derivative = { workspace = true } eth2_network_config = { workspace = true } ethereum_ssz = { workspace = true } diff --git a/testing/ef_tests/src/cases/ssz_generic.rs b/testing/ef_tests/src/cases/ssz_generic.rs index 96627472ba..3aa147a74c 100644 --- a/testing/ef_tests/src/cases/ssz_generic.rs +++ b/testing/ef_tests/src/cases/ssz_generic.rs @@ -4,8 +4,7 @@ use super::*; use crate::cases::common::{DecimalU128, DecimalU256, SszStaticType}; use crate::cases::ssz_static::{check_serialization, check_tree_hash}; use crate::decode::{context_yaml_decode_file, log_file_access, snappy_decode_file}; -use context_deserialize::ContextDeserialize; -use context_deserialize_derive::context_deserialize; +use context_deserialize::{context_deserialize, ContextDeserialize}; use serde::{de::Error as SerdeError, Deserialize, Deserializer}; use ssz_derive::{Decode, Encode}; use tree_hash::TreeHash;