substrate-data 0.3.1

One data model, text syntax, binary form, packed frames and schema system — for any program's files, saves and wire messages.
Documentation
[package]
name = "substrate-data"
version = { workspace = true }
edition = { workspace = true }
rust-version = { workspace = true }
authors = { workspace = true }
license = { workspace = true }
repository = { workspace = true }
readme = "README.md"
documentation = "https://docs.rs/substrate-data"
description = "One data model, text syntax, binary form, packed frames and schema system — for any program's files, saves and wire messages."
keywords = ["serialization", "schema", "binary", "json5", "format"]
categories = ["encoding", "parser-implementations"]

[dependencies]
substrate-data-derive = { workspace = true }
base64 = { workspace = true }
# Vectorised byte search (runtime-dispatched) for the text parser's scans.
memchr = { workspace = true, features = ["std"] }
# Shortest-digits float printer, much cheaper than `fmt`; the text form's floats.
zmij = { workspace = true }
# The arena borrowed values' lists and maps live in (`ValueRef`).
bumpalo = { workspace = true }
# TOML read into the model (`toml` feature).
toml = { workspace = true, features = ["std", "parse", "preserve_order"], optional = true }
serde_spanned = { workspace = true, optional = true }
# SIMD UTF-8 validation (`simd-utf8` feature).
simdutf8 = { workspace = true, features = ["std"], optional = true }
# JSON ⇄ the model (`json` feature).
serde_json = { workspace = true, optional = true }
# Async frames over tokio streams (`tokio` feature): only the I/O traits.
tokio = { workspace = true, features = ["io-util"], optional = true }

[features]
tokio = ["dep:tokio"]
toml = ["dep:toml", "dep:serde_spanned"]
json = ["dep:serde_json"]
simd-utf8 = ["dep:simdutf8"]

[dev-dependencies]
criterion = { workspace = true, features = ["cargo_bench_support"] }
serde_json = { workspace = true }
# The comparison bench (`benches/compare.rs`) and the size table (`examples/sizes.rs`).
serde = { workspace = true }
serde_bytes = { workspace = true }
ciborium = { workspace = true }
rmp-serde = { workspace = true }
postcard = { workspace = true }
bincode = { workspace = true }
# The UTF-8 benchmark measures the validator itself next to the standard library's.
simdutf8 = { workspace = true, features = ["std"] }
# The async tests and bench drive a runtime (`tokio` feature).
tokio = { workspace = true, features = ["rt", "macros", "io-util", "time"] }
# Instruction counts under valgrind (`benches/iai.rs`).
iai-callgrind = { workspace = true }

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

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

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

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

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

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

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

[[bench]]
name = "io_async"
harness = false
required-features = ["tokio"]

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

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

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

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

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

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

# Instruction counts, not time: needs valgrind and `iai-callgrind-runner`.
[[bench]]
name = "iai"
harness = false

[lints]
workspace = true