[package]
name = "reth-primitives-traits"
version.workspace = true
edition.workspace = true
homepage.workspace = true
license.workspace = true
repository.workspace = true
rust-version.workspace = true
description = "Common types in reth."

[lints]
workspace = true

[dependencies]
# reth
reth-codecs = { workspace = true, optional = true }

# ethereum
alloy-consensus.workspace = true
alloy-eips.workspace = true
alloy-genesis.workspace = true
alloy-primitives.workspace = true
alloy-rlp.workspace = true
alloy-trie.workspace = true
revm-primitives.workspace = true

# op
op-alloy-consensus = { workspace = true, optional = true }

# crypto
secp256k1 = { workspace = true, features = ["recovery"], optional = true }
k256.workspace = true

# misc
auto_impl.workspace = true
byteorder = { workspace = true, optional = true }
bytes.workspace = true
derive_more.workspace = true
once_cell.workspace = true
serde_with = { workspace = true, optional = true }
thiserror.workspace = true

# required by reth-codecs
modular-bitfield = { workspace = true, optional = true }
serde = { workspace = true, optional = true }

# arbitrary utils
arbitrary = { workspace = true, features = ["derive"], optional = true }
proptest = { workspace = true, optional = true }
proptest-arbitrary-interop = { workspace = true, optional = true }
rayon = { workspace = true, optional = true }

[dev-dependencies]
reth-codecs.workspace = true
reth-chainspec = { workspace = true, features = ["arbitrary"] }

alloy-primitives = { workspace = true, features = ["arbitrary", "serde"] }
alloy-consensus = { workspace = true, features = ["arbitrary", "serde"] }

arbitrary = { workspace = true, features = ["derive"] }
secp256k1 = { workspace = true, features = ["recovery", "global-context", "rand"] }
bincode.workspace = true
byteorder.workspace = true
proptest-arbitrary-interop.workspace = true
proptest.workspace = true
rand.workspace = true
serde.workspace = true
serde_json.workspace = true
test-fuzz.workspace = true
modular-bitfield.workspace = true

[features]
default = ["std"]
std = [
    "alloy-consensus/std",
    "alloy-eips/std",
    "alloy-genesis/std",
    "alloy-primitives/std",
    "revm-primitives/std",
    "serde?/std",
    "serde_with?/std",
    "alloy-rlp/std",
    "bytes/std",
    "derive_more/std",
    "k256/std",
    "once_cell/std",
    "secp256k1?/std",
    "thiserror/std",
    "alloy-trie/std",
    "op-alloy-consensus?/std",
    "serde_json/std",
    "reth-chainspec/std",
]
secp256k1 = ["dep:secp256k1"]
test-utils = [
    "arbitrary",
    "reth-codecs?/test-utils",
    "reth-chainspec/test-utils",
]
arbitrary = [
    "std",
    "alloy-consensus/arbitrary",
    "alloy-primitives/arbitrary",
    "dep:arbitrary",
    "dep:proptest",
    "dep:proptest-arbitrary-interop",
    "alloy-eips/arbitrary",
    "revm-primitives/arbitrary",
    "reth-codecs?/arbitrary",
    "secp256k1?/global-context",
    "secp256k1?/rand",
    "op-alloy-consensus?/arbitrary",
    "alloy-trie/arbitrary",
    "reth-chainspec/arbitrary",
]
serde-bincode-compat = [
    "serde",
    "serde_with",
    "alloy-consensus/serde-bincode-compat",
    "alloy-eips/serde-bincode-compat",
    "op-alloy-consensus?/serde-bincode-compat",
]
serde = [
    "dep:serde",
    "alloy-consensus/serde",
    "alloy-eips/serde",
    "alloy-primitives/serde",
    "bytes/serde",
    "rand/serde",
    "reth-codecs?/serde",
    "revm-primitives/serde",
    "revm-primitives/serde",
    "op-alloy-consensus?/serde",
    "k256/serde",
    "secp256k1?/serde",
    "alloy-trie/serde",
]
reth-codec = [
    "dep:reth-codecs",
    "dep:modular-bitfield",
    "dep:byteorder",
]
op = [
    "dep:op-alloy-consensus",
]
rayon = [
    "dep:rayon",
]
