http-cache-quickcache

An http-cache manager implementation for quick-cache.
Minimum Supported Rust Version (MSRV)
1.82.0
Install
With cargo add installed :
cargo add http-cache-quickcache
Example
With Tower Services
use tower::{Service, ServiceExt};
use http::{Request, Response, StatusCode};
use http_body_util::Full;
use bytes::Bytes;
use http_cache_quickcache::QuickManager;
use std::convert::Infallible;
#[derive(Clone)]
struct CachingService {
cache_manager: QuickManager,
}
impl Service<Request<Full<Bytes>>> for CachingService {
type Response = Response<Full<Bytes>>;
type Error = Box<dyn std::error::Error + Send + Sync>;
type Future = std::pin::Pin<Box<dyn std::future::Future<Output = Result<Self::Response, Self::Error>> + Send>>;
fn poll_ready(&mut self, _cx: &mut std::task::Context<'_>) -> std::task::Poll<Result<(), Self::Error>> {
std::task::Poll::Ready(Ok(()))
}
fn call(&mut self, req: Request<Full<Bytes>>) -> Self::Future {
let manager = self.cache_manager.clone();
Box::pin(async move {
let response = Response::builder()
.status(StatusCode::OK)
.body(Full::new(Bytes::from("Hello from cached service!")))?;
Ok(response)
})
}
}
With Hyper
use hyper::{Request, Response, StatusCode, body::Incoming};
use http_body_util::Full;
use bytes::Bytes;
use http_cache_quickcache::QuickManager;
use std::convert::Infallible;
async fn handle_request(
_req: Request<Incoming>,
cache_manager: QuickManager,
) -> Result<Response<Full<Bytes>>, Infallible> {
Ok(Response::builder()
.status(StatusCode::OK)
.header("cache-control", "max-age=3600")
.body(Full::new(Bytes::from("Hello from Hyper with caching!")))
.unwrap())
}
Documentation
License
Licensed under either of
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.