rustfs-erasure-codec 8.0.0

Rust implementation of Reed-Solomon erasure coding
Documentation
[workspace]
members = [".", "wasm", "fuzz"]
resolver = "3"

[workspace.package]
edition = "2024"
rust-version = "1.96"
license = "MIT"
repository = "https://github.com/houseme/reed-solomon-erasure"

[workspace.dependencies]
cc = "1.2"
cfg_aliases = "0.2"
criterion = { version = "0.8.2", features = ["html_reports"] }
hashlink = { version = "0.12", default-features = false }
libc = "0.2"
libfuzzer-sys = "0.4"
libm = "0.2.16"
parking_lot = "0.12.5"
quickcheck = "1.1.0"
rand = "0.10.2"
rayon = "1.12"
rustfs-erasure-codec = { version = "8.0.0", path = "." }
smallvec = "1.15"
spin = { version = "0.12.2", default-features = false, features = ["once", "spin_mutex"] }
wasm-bindgen = "0.2.126"
wee_alloc = "0.4"

# CI lint baseline (rustfs/backlog#1237, #1243). Members opt in via `[lints] workspace = true`.
# `undocumented_unsafe_blocks` is enabled (#1243); `missing_docs` is still staged.
# workspace.lints have lower priority than in-source attributes, so existing
# `#![allow(...)]` still applies.
[workspace.lints.rust]
unsafe_op_in_unsafe_fn = "deny"
unused_lifetimes = "warn"
noop_method_call = "warn"

[workspace.lints.clippy]
all = "warn"
undocumented_unsafe_blocks = "warn"

[lints]
workspace = true

[package]
name = "rustfs-erasure-codec"
version = "8.0.0"
authors = ["Darren Ldl <darrenldldev@gmail.com>"]
edition.workspace = true
build = "build.rs"
exclude = [
    ".gitattributes",
    ".github",
    ".gitignore",
    ".travis.yml",
    ".typos.toml",
    "appveyor.yml",
    "bench_clean_compare.sh",
    "benches",
    "benchmarks",
    "docs",
    "fuzz",
    "sage",
    "scripts",
]
rust-version.workspace = true
description = "Rust implementation of Reed-Solomon erasure coding"
documentation = "https://docs.rs/rustfs-erasure-codec"
homepage = "https://github.com/houseme/reed-solomon-erasure"
repository.workspace = true
readme = "README.md"
keywords = ["reed-solomon", "erasure"]
categories = ["encoding"]
license.workspace = true

[features]
default = ["std"] # simd and metrics off by default
std = ["parking_lot", "rayon"]
# Fine-grained SIMD backends — enable per-architecture as needed.
# Users on aarch64 should enable `simd-neon`; users on x86_64 should enable
# whichever ISA extensions their target supports.
simd-neon = ["cc", "libc"]
simd-ssse3 = ["cc", "libc"]
simd-avx2 = ["cc", "libc"]
simd-avx512 = ["cc", "libc"]
simd-gfni = ["cc", "libc"]
# VSX is a pure-Rust backend (compile-time `target_feature = "vsx"` detection,
# nibble-lookup tables generated by build.rs). It compiles no C and calls no
# libc, so — unlike the x86/aarch64 backends — it needs neither `cc` nor `libc`.
simd-vsx = []
# Backwards-compatible umbrella: enables all SIMD backends.
simd-accel = ["simd-neon", "simd-ssse3", "simd-avx2", "simd-avx512", "simd-gfni", "simd-vsx"]
benchmark-metrics = []

[dependencies]
libc = { workspace = true, optional = true }
# `log2()` impl for `no_std`
libm.workspace = true
hashlink.workspace = true
# Efficient `Mutex` implementation for `std` environment
parking_lot = { workspace = true, optional = true }
rayon = { workspace = true, optional = true }
smallvec.workspace = true
# `Mutex` implementation for `no_std` environment with the same high-level API as `parking_lot`
spin.workspace = true

[dev-dependencies]
rand.workspace = true
quickcheck.workspace = true
# Scientific benchmarking
criterion.workspace = true

[build-dependencies]
cc = { workspace = true, optional = true }
cfg_aliases = { workspace = true }

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

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

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