Skip to content

Latest commit

 

History

History
108 lines (81 loc) · 3.72 KB

README.md

File metadata and controls

108 lines (81 loc) · 3.72 KB

http-cache-quickcache

CI Crates.io Docs.rs Codecov Crates.io

the http-cache logo

An http-cache manager implementation for quick-cache.

Minimum Supported Rust Version (MSRV)

1.89.0

See the MSRV policy.

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;

// Example Tower service that uses QuickManager for caching
#[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 {
            // Cache logic using the manager would go here
            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> {
    // Use cache_manager here for caching responses
    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.