[package] name = "qbz-offline-cache" version.workspace = true edition.workspace = true license.workspace = true description = "Offline cache for QBZ: download-for-offline store, CMAF bundle vault, SQLite index, cached playback resolution (frontend-agnostic)" [dependencies] # Sibling crates: the network + crypto + init-parse + library index already live here. qbz-models = { path = "../qbz-models" } qbz-qobuz = { path = "../qbz-qobuz" } qbz-cmaf = { path = "../qbz-cmaf" } qbz-secrets = { path = "../qbz-secrets" } qbz-library = { path = "../qbz-library" } # SQLite index (match qbz-library's version/features) rusqlite = { version = "0.40", features = ["bundled"] } # Async runtime + HTTP (download pipeline + artwork) tokio = { workspace = true } reqwest = { workspace = true } futures-util = { workspace = true } # FLAC tag + artwork embedding (legacy-format post-processing) lofty.workspace = true # Platform cache dir (default offline-root location) dirs = "6" # DTO serialization (camelCase envelopes shared with the frontend) serde = { workspace = true } serde_json = { workspace = true } # Logging log = { workspace = true } [dev-dependencies] tempfile = "3" # The purchase download harness (`tests/purchase_download_harness.rs`) stands up # a real local HTTP server and drives the pipeline with real bytes. Integration # tests do not inherit `[dependencies]`, so the crates it names are repeated here. tokio = { workspace = true } lofty.workspace = true qbz-models = { path = "../qbz-models" } qbz-library = { path = "../qbz-library" } # reqwest is built with `rustls-tls-webpki-roots-no-provider`, so building ANY # client panics with "No provider set" until a process-level CryptoProvider is # installed. The app does that at startup (`qbz_app::ensure_crypto_provider`); # a test binary has no startup, so the harness installs it itself. rustls = { version = "0.23", features = ["aws_lc_rs"] }