[package]
name = "ipfrs-core"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
rust-version.workspace = true
description = "Core content-addressing primitives and data structures for IPFRS"
keywords = ["ipfs", "content-addressing", "cid", "multihash", "distributed"]
categories = ["data-structures", "cryptography", "algorithms"]
documentation = "https://docs.rs/ipfrs-core"
homepage.workspace = true

[dependencies]
# Content addressing
cid = { workspace = true }
multihash = { workspace = true }
multihash-codetable = { workspace = true }
multibase = { workspace = true }

# Serialization
serde = { workspace = true }
serde_json = { workspace = true }
oxicode = { workspace = true }
ciborium = { workspace = true }
bytes = { workspace = true }
base64 = { workspace = true }

# Error handling
thiserror = { workspace = true }
anyhow = { workspace = true }

# Async
tokio = { workspace = true }
futures = { workspace = true }

# Utilities
once_cell = { workspace = true }
rayon = { workspace = true }

# Apache Arrow (zero-copy tensor memory)
arrow = { workspace = true }
arrow-array = { workspace = true }
arrow-buffer = { workspace = true }
arrow-schema = { workspace = true }

# Cryptography
blake3 = { workspace = true }
blake2 = { workspace = true }
jsonwebtoken = { workspace = true }
sha2 = { workspace = true }
sha3 = { workspace = true }

# Compression — Pure Rust OxiARC crates (COOLJAPAN policy)
oxiarc-zstd = { workspace = true }
oxiarc-lz4 = { workspace = true }

# wasm32 random number generation
getrandom = { workspace = true }

[features]
default = []
# Enable wasm32-compatible random number generation (passes `getrandom/js`
# through to the underlying crate so wasm targets can call the JS runtime).
wasm = ["getrandom/wasm_js"]

[dev-dependencies]
proptest = { workspace = true }
criterion = { workspace = true }

[[bench]]
name = "core_benchmarks"
harness = false
