From f54369b3a132ac73329f5b348582011a72e22c2f Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Thu, 5 Dec 2024 20:42:10 +0100 Subject: [PATCH 1/2] feat: re-export used deps from reth-codecs --- Cargo.lock | 2 -- crates/storage/codecs/Cargo.toml | 3 +-- crates/storage/codecs/derive/src/compact/flags.rs | 9 +++++++-- crates/storage/codecs/derive/src/compact/generator.rs | 2 +- crates/storage/codecs/derive/src/compact/mod.rs | 9 +++++---- crates/storage/codecs/src/lib.rs | 5 +++++ crates/storage/codecs/src/private.rs | 3 +++ crates/storage/db-api/Cargo.toml | 1 - crates/storage/db-models/Cargo.toml | 1 - 9 files changed, 22 insertions(+), 13 deletions(-) create mode 100644 crates/storage/codecs/src/private.rs diff --git a/Cargo.lock b/Cargo.lock index 666293e58e6b..cd20e506c9d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6976,7 +6976,6 @@ dependencies = [ "bytes", "derive_more", "metrics", - "modular-bitfield", "parity-scale-codec", "proptest", "proptest-arbitrary-interop", @@ -7031,7 +7030,6 @@ dependencies = [ "alloy-primitives", "arbitrary", "bytes", - "modular-bitfield", "proptest", "proptest-arbitrary-interop", "reth-codecs", diff --git a/crates/storage/codecs/Cargo.toml b/crates/storage/codecs/Cargo.toml index c3210b21ae2c..76a3721629ae 100644 --- a/crates/storage/codecs/Cargo.toml +++ b/crates/storage/codecs/Cargo.toml @@ -26,7 +26,7 @@ op-alloy-consensus = { workspace = true, optional = true } # misc bytes.workspace = true -modular-bitfield = { workspace = true, optional = true } +modular-bitfield.workspace = true visibility = { version = "0.1.1", optional = true} serde.workspace = true arbitrary = { workspace = true, features = ["derive"], optional = true } @@ -65,7 +65,6 @@ alloy = [ "dep:alloy-consensus", "dep:alloy-eips", "dep:alloy-genesis", - "dep:modular-bitfield", "dep:alloy-trie", ] op = ["alloy", "dep:op-alloy-consensus"] diff --git a/crates/storage/codecs/derive/src/compact/flags.rs b/crates/storage/codecs/derive/src/compact/flags.rs index 3242a611eb39..798c9ad53b45 100644 --- a/crates/storage/codecs/derive/src/compact/flags.rs +++ b/crates/storage/codecs/derive/src/compact/flags.rs @@ -1,9 +1,11 @@ use super::*; +use syn::Attribute; /// Generates the flag fieldset struct that is going to be used to store the length of fields and /// their potential presence. pub(crate) fn generate_flag_struct( ident: &Ident, + attrs: &[Attribute], has_lifetime: bool, fields: &FieldList, is_zstd: bool, @@ -13,6 +15,8 @@ pub(crate) fn generate_flag_struct( let flags_ident = format_ident!("{ident}Flags"); let mod_flags_ident = format_ident!("{ident}_flags"); + let reth_codecs = parse_reth_codecs_path(attrs).unwrap(); + let mut field_flags = vec![]; let total_bits = if is_enum { @@ -88,8 +92,9 @@ pub(crate) fn generate_flag_struct( pub use #mod_flags_ident::#flags_ident; #[allow(non_snake_case)] mod #mod_flags_ident { - use bytes::Buf; - use modular_bitfield::prelude::*; + use #reth_codecs::__private::Buf; + use #reth_codecs::__private::modular_bitfield; + use #reth_codecs::__private::modular_bitfield::prelude::*; #[doc = #docs] #[bitfield] diff --git a/crates/storage/codecs/derive/src/compact/generator.rs b/crates/storage/codecs/derive/src/compact/generator.rs index cf9bcc0c6295..42602093530f 100644 --- a/crates/storage/codecs/derive/src/compact/generator.rs +++ b/crates/storage/codecs/derive/src/compact/generator.rs @@ -239,7 +239,7 @@ fn generate_to_compact(fields: &FieldList, ident: &Ident, is_zstd: bool) -> Vec< } /// Function to extract the crate path from `reth_codecs(crate = "...")` attribute. -fn parse_reth_codecs_path(attrs: &[Attribute]) -> syn::Result { +pub(crate)fn parse_reth_codecs_path(attrs: &[Attribute]) -> syn::Result { // let default_crate_path: syn::Path = syn::parse_str("reth-codecs").unwrap(); let mut reth_codecs_path: syn::Path = syn::parse_quote!(reth_codecs); for attr in attrs { diff --git a/crates/storage/codecs/derive/src/compact/mod.rs b/crates/storage/codecs/derive/src/compact/mod.rs index b9d5cf18d6b7..1afe6d68683e 100644 --- a/crates/storage/codecs/derive/src/compact/mod.rs +++ b/crates/storage/codecs/derive/src/compact/mod.rs @@ -48,7 +48,7 @@ pub fn derive(input: TokenStream, is_zstd: bool) -> TokenStream { let has_lifetime = has_lifetime(&generics); let fields = get_fields(&data); - output.extend(generate_flag_struct(&ident, has_lifetime, &fields, is_zstd)); + output.extend(generate_flag_struct(&ident, &attrs, has_lifetime, &fields, is_zstd)); output.extend(generate_from_to(&ident, &attrs, has_lifetime, &fields, is_zstd)); output.into() } @@ -235,7 +235,7 @@ mod tests { let mut output = quote! {}; let DeriveInput { ident, data, attrs, .. } = parse2(f_struct).unwrap(); let fields = get_fields(&data); - output.extend(generate_flag_struct(&ident, false, &fields, false)); + output.extend(generate_flag_struct(&ident, &attrs,false, &fields, false)); output.extend(generate_from_to(&ident, &attrs, false, &fields, false)); // Expected output in a TokenStream format. Commas matter! @@ -255,8 +255,9 @@ mod tests { #[allow(non_snake_case)] mod TestStruct_flags { - use bytes::Buf; - use modular_bitfield::prelude::*; + use reth_codecs::__private::Buf; + use reth_codecs::__private::modular_bitfield; + use reth_codecs::__private::modular_bitfield::prelude::*; #[doc = "Fieldset that facilitates compacting the parent type. Used bytes: 2 | Unused bits: 1"] #[bitfield] #[derive(Clone, Copy, Debug, Default)] diff --git a/crates/storage/codecs/src/lib.rs b/crates/storage/codecs/src/lib.rs index 86d397ad24f0..8c6ba5e4c766 100644 --- a/crates/storage/codecs/src/lib.rs +++ b/crates/storage/codecs/src/lib.rs @@ -39,6 +39,11 @@ pub mod txtype; #[cfg(any(test, feature = "test-utils"))] pub mod test_utils; +// Used by generated code and doc tests. Not public API. +#[doc(hidden)] +#[path = "private.rs"] +pub mod __private; + /// Trait that implements the `Compact` codec. /// /// When deriving the trait for custom structs, be aware of certain limitations/recommendations: diff --git a/crates/storage/codecs/src/private.rs b/crates/storage/codecs/src/private.rs new file mode 100644 index 000000000000..902c609733ba --- /dev/null +++ b/crates/storage/codecs/src/private.rs @@ -0,0 +1,3 @@ +pub use modular_bitfield; + +pub use bytes::Buf; \ No newline at end of file diff --git a/crates/storage/db-api/Cargo.toml b/crates/storage/db-api/Cargo.toml index 4f9c2d76b3f4..f3ed3b4f71c5 100644 --- a/crates/storage/db-api/Cargo.toml +++ b/crates/storage/db-api/Cargo.toml @@ -28,7 +28,6 @@ alloy-genesis.workspace = true alloy-consensus.workspace = true # codecs -modular-bitfield.workspace = true roaring = "0.10.2" parity-scale-codec = { version = "3.2.1", features = ["bytes"] } serde = { workspace = true, default-features = false } diff --git a/crates/storage/db-models/Cargo.toml b/crates/storage/db-models/Cargo.toml index 0997c08b784d..5bf6ac6fd546 100644 --- a/crates/storage/db-models/Cargo.toml +++ b/crates/storage/db-models/Cargo.toml @@ -21,7 +21,6 @@ alloy-primitives.workspace = true alloy-eips.workspace = true # codecs -modular-bitfield.workspace = true serde = { workspace = true, default-features = false } # misc From cb8116073986571699d719b0a57e60bebe75afcc Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Fri, 6 Dec 2024 09:21:29 +0100 Subject: [PATCH 2/2] make it compile --- Cargo.lock | 2 ++ crates/storage/codecs/derive/src/compact/generator.rs | 2 +- crates/storage/codecs/derive/src/compact/mod.rs | 2 +- crates/storage/codecs/src/private.rs | 2 +- crates/storage/db-api/Cargo.toml | 1 + crates/storage/db-models/Cargo.toml | 1 + 6 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cd20e506c9d1..666293e58e6b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6976,6 +6976,7 @@ dependencies = [ "bytes", "derive_more", "metrics", + "modular-bitfield", "parity-scale-codec", "proptest", "proptest-arbitrary-interop", @@ -7030,6 +7031,7 @@ dependencies = [ "alloy-primitives", "arbitrary", "bytes", + "modular-bitfield", "proptest", "proptest-arbitrary-interop", "reth-codecs", diff --git a/crates/storage/codecs/derive/src/compact/generator.rs b/crates/storage/codecs/derive/src/compact/generator.rs index 42602093530f..63fef05ad705 100644 --- a/crates/storage/codecs/derive/src/compact/generator.rs +++ b/crates/storage/codecs/derive/src/compact/generator.rs @@ -239,7 +239,7 @@ fn generate_to_compact(fields: &FieldList, ident: &Ident, is_zstd: bool) -> Vec< } /// Function to extract the crate path from `reth_codecs(crate = "...")` attribute. -pub(crate)fn parse_reth_codecs_path(attrs: &[Attribute]) -> syn::Result { +pub(crate) fn parse_reth_codecs_path(attrs: &[Attribute]) -> syn::Result { // let default_crate_path: syn::Path = syn::parse_str("reth-codecs").unwrap(); let mut reth_codecs_path: syn::Path = syn::parse_quote!(reth_codecs); for attr in attrs { diff --git a/crates/storage/codecs/derive/src/compact/mod.rs b/crates/storage/codecs/derive/src/compact/mod.rs index 1afe6d68683e..1c1723d2ec94 100644 --- a/crates/storage/codecs/derive/src/compact/mod.rs +++ b/crates/storage/codecs/derive/src/compact/mod.rs @@ -235,7 +235,7 @@ mod tests { let mut output = quote! {}; let DeriveInput { ident, data, attrs, .. } = parse2(f_struct).unwrap(); let fields = get_fields(&data); - output.extend(generate_flag_struct(&ident, &attrs,false, &fields, false)); + output.extend(generate_flag_struct(&ident, &attrs, false, &fields, false)); output.extend(generate_from_to(&ident, &attrs, false, &fields, false)); // Expected output in a TokenStream format. Commas matter! diff --git a/crates/storage/codecs/src/private.rs b/crates/storage/codecs/src/private.rs index 902c609733ba..6f54d9c9ca82 100644 --- a/crates/storage/codecs/src/private.rs +++ b/crates/storage/codecs/src/private.rs @@ -1,3 +1,3 @@ pub use modular_bitfield; -pub use bytes::Buf; \ No newline at end of file +pub use bytes::Buf; diff --git a/crates/storage/db-api/Cargo.toml b/crates/storage/db-api/Cargo.toml index f3ed3b4f71c5..4f9c2d76b3f4 100644 --- a/crates/storage/db-api/Cargo.toml +++ b/crates/storage/db-api/Cargo.toml @@ -28,6 +28,7 @@ alloy-genesis.workspace = true alloy-consensus.workspace = true # codecs +modular-bitfield.workspace = true roaring = "0.10.2" parity-scale-codec = { version = "3.2.1", features = ["bytes"] } serde = { workspace = true, default-features = false } diff --git a/crates/storage/db-models/Cargo.toml b/crates/storage/db-models/Cargo.toml index 5bf6ac6fd546..0997c08b784d 100644 --- a/crates/storage/db-models/Cargo.toml +++ b/crates/storage/db-models/Cargo.toml @@ -21,6 +21,7 @@ alloy-primitives.workspace = true alloy-eips.workspace = true # codecs +modular-bitfield.workspace = true serde = { workspace = true, default-features = false } # misc