[package]
name = "cachet"
description = "A composable, customizable multi-tier caching library with rich feature support."
version = "0.7.4"
readme = "README.md"
keywords = ["oxidizer", "caching", "concurrency"]
categories = ["caching", "concurrency"]
edition.workspace = true
rust-version.workspace = true
authors.workspace = true
license.workspace = true
homepage.workspace = true
include.workspace = true
repository = "https://github.com/microsoft/oxidizer/tree/main/crates/cachet"
[package.metadata.docs.rs]
all-features = true
[package.metadata.cargo_check_external_types]
allowed_external_types = [
"anyspawn::spawner::Spawner",
"bytesbuf::view::BytesView",
"cachet_memory::*",
"cachet_service::*",
"cachet_tier::*",
"layered::service::Service",
"tick::clock::Clock",
"serde_core::de::DeserializeOwned",
"serde_core::ser::Serialize",
]
[features]
default = ["memory"]
logs = ["dep:tracing"]
test-util = ["cachet_tier/test-util", "tick/test-util"]
memory = ["dep:cachet_memory"]
service = ["dep:cachet_service", "dep:layered"]
serialize = ["dep:serde", "dep:postcard", "dep:bytesbuf"]
telemetry = []
[dependencies]
anyspawn = { workspace = true, features = ["tokio"] }
bytesbuf = { workspace = true, optional = true }
cachet_memory = { workspace = true, optional = true }
cachet_service = { workspace = true, optional = true }
cachet_tier = { workspace = true }
futures = { workspace = true, features = ["async-await", "executor"] }
layered = { workspace = true, optional = true }
ohno = { workspace = true }
parking_lot = { workspace = true }
pin-project-lite = { workspace = true }
postcard = { workspace = true, optional = true }
serde = { workspace = true, optional = true, features = ["derive"] }
tick = { workspace = true, features = [] }
tracing = { workspace = true, optional = true }
uniflight = { workspace = true }
[dev-dependencies]
alloc_tracker = { workspace = true }
bytesbuf = { path = "../bytesbuf" }
cachet_memory = { path = "../cachet_memory" }
cachet_tier = { path = "../cachet_tier", features = ["test-util"] }
criterion = { workspace = true }
dashmap = { workspace = true }
dynosaur = { workspace = true }
opentelemetry = { workspace = true, features = [
"metrics",
"logs",
] }
opentelemetry_sdk = { workspace = true, features = ["logs", "testing"] }
postcard = { workspace = true }
recoverable = { path = "../recoverable" }
seatbelt = { path = "../seatbelt", features = ["retry", "tower-service"] }
serde = { workspace = true, features = ["derive"] }
testing_aids = { path = "../testing_aids" }
tick = { path = "../tick", features = ["test-util", "tokio"] }
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
tracing = { workspace = true, features = ["std"] }
tracing-subscriber = { workspace = true, features = ["fmt", "registry", "ansi"] }
[[bench]]
name = "operations"
harness = false
required-features = ["logs", "test-util"]
[[bench]]
name = "dynamic"
harness = false
required-features = ["test-util"]
[[bench]]
name = "refresh"
harness = false
required-features = ["test-util"]
[[test]]
name = "eviction"
required-features = ["memory", "logs"]
[[test]]
name = "no_subscriber"
required-features = ["memory", "logs", "test-util"]
[[example]]
name = "simple"
required-features = ["memory"]
[[example]]
name = "wrapped"
required-features = ["memory", "logs"]
[[example]]
name = "two_tier"
required-features = ["memory", "logs"]
[[example]]
name = "multi_tier"
required-features = ["memory", "logs"]
[[example]]
name = "get_or_insert"
required-features = ["memory"]
[[example]]
name = "stampede_protection"
required-features = ["memory"]
[[example]]
name = "refresh"
required-features = ["memory"]
[[example]]
name = "mock_testing"
required-features = ["test-util"]
[[example]]
name = "cache_as_service"
required-features = ["memory", "service"]
[[example]]
name = "service_as_storage"
required-features = ["service"]
[[example]]
name = "multi_tier_service"
required-features = ["memory", "service"]
[[example]]
name = "service_middleware_composition"
required-features = ["memory", "service"]
[[example]]
name = "type_mapping"
required-features = ["memory", "test-util"]
[[example]]
name = "telemetry_subscriber"
required-features = ["memory", "logs"]
[[example]]
name = "telemetry_accumulator"
required-features = ["memory", "logs"]
[[example]]
name = "serialization"
required-features = ["memory", "serialize"]
[lints]
workspace = true