Skip to main content

siderite_cache/
lib.rs

1//! Cache backends and HTTP route caching for siderite applications.
2//!
3//! [`MemoryCache`] is a process-local LRU with per-entry TTL.
4//! [`RedisCache`] (feature `redis`) wraps `siderite_backends::redis::RedisStore`.
5//! [`RouteCache`] is a `tower` layer for `App::layer` that caches GET/HEAD 200
6//! responses.
7//!
8//! ```
9//! use siderite_cache::{Cache, CacheExt, MemoryCache};
10//! use std::time::Duration;
11//!
12//! # #[tokio::main]
13//! # async fn main() {
14//! let cache = MemoryCache::new(128);
15//! cache.set("greeting", b"hello".to_vec(), None).await.unwrap();
16//! assert_eq!(
17//!     cache.get("greeting").await.unwrap().as_deref(),
18//!     Some(&b"hello"[..])
19//! );
20//! cache
21//!     .set_json("n", &7u32, Some(Duration::from_secs(60)))
22//!     .await
23//!     .unwrap();
24//! assert_eq!(cache.get_json::<u32>("n").await.unwrap(), Some(7));
25//! # }
26//! ```
27#![forbid(unsafe_code)]
28
29mod admission;
30mod cache;
31mod error;
32mod memory;
33mod route;
34
35#[cfg(feature = "redis")]
36mod redis;
37
38pub use admission::{Admission, AdmitMarker};
39pub use cache::{Cache, CacheExt};
40pub use error::CacheError;
41pub use memory::{MemoryCache, MemoryCacheLimits};
42pub use route::{
43    DEFAULT_GENERATION_TTL, DEFAULT_MAX_BODY_BYTES, DEFAULT_MAX_NEW_TARGETS, RouteCache,
44};
45
46#[cfg(feature = "redis")]
47pub use redis::RedisCache;