mediadecode 0.5.0

Generic, no_std-friendly type-and-trait spine for media decoders (FFmpeg, WebCodecs, R3D, BRAW, ARRIRAW, X-OCN, ProRes RAW, Canon Cinema RAW Light).
Documentation
[package]
name        = "mediadecode"
version     = "0.5.0"
edition.workspace      = true
rust-version.workspace = true
license.workspace      = true
repository.workspace   = true
homepage.workspace     = true
documentation = "https://docs.rs/mediadecode"
description = "Generic, no_std-friendly type-and-trait spine for media decoders (FFmpeg, WebCodecs, R3D, BRAW, ARRIRAW, X-OCN, ProRes RAW, Canon Cinema RAW Light)."
keywords   = ["media", "decoder", "video", "audio", "no-std"]
categories = ["multimedia", "multimedia::video", "multimedia::audio", "no-std", "no-std::no-alloc"]

[features]
default = ["std"]
# `serde?/alloc` and `serde?/std` are what let the two alloc-tier structs
# derive `Deserialize`: their `Vec` and `SmolStr` fields sit behind serde's
# own capability features. The `?` keeps serde out of the build entirely
# when this crate's `serde` feature is off.
alloc   = ["smol_str", "serde?/alloc"]
std     = ["mediatime/default", "smol_str/default", "serde?/std"]

# Async-fn-in-trait variants of the decoder traits, exposed under
# `mediadecode::future`. No runtime dependency — only a proc-macro
# (`trait-variant`) used to generate the `Send`-bounded sibling of
# each `!Send` trait. Callers pick their own executor.
future = ["dep:trait-variant"]

# `bitflags/serde` is deliberately absent. It is opt-in per type (a
# `Serialize` / `Deserialize` derive inside the `bitflags!` body, which
# `PacketFlags` does not carry) and its wire shape is a flag *grammar*
# — `"KEY | CORRUPT"` — in any human-readable format. `PacketFlags`
# serializes as its bits instead, hand-written in `packet::serde_impls`.
serde      = ["dep:serde", "mediatime/serde", "smol_str?/serde"]
arbitrary  = ["dep:arbitrary", "mediatime/arbitrary", "smol_str?/arbitrary"]
quickcheck = ["dep:quickcheck", "mediatime/quickcheck"]

[dependencies]
mediatime   = { workspace = true }
bitflags    = { workspace = true }
derive_more = { workspace = true, features = ["display", "is_variant"] }
thiserror   = { workspace = true }
smol_str    = { workspace = true, optional = true }
mediaframe  = { workspace = true }

serde      = { workspace = true, optional = true }
arbitrary  = { workspace = true, optional = true }
quickcheck = { workspace = true, optional = true }

trait-variant = { workspace = true, optional = true }

[dev-dependencies]
criterion  = { workspace = true }
tempfile   = { workspace = true }
serde_json = { workspace = true }

[[bench]]
path    = "benches/foo.rs"
name    = "foo"
harness = false

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[lints]
workspace = true