# http-cache-surf [![CI](https://img.shields.io/github/actions/workflow/status/06chaynes/http-cache/http-cache-surf.yml?label=CI&style=for-the-badge)](https://github.com/06chaynes/http-cache/actions/workflows/http-cache-surf.yml) [![Crates.io](https://img.shields.io/crates/v/http-cache-surf?style=for-the-badge)](https://crates.io/crates/http-cache-surf) [![Docs.rs](https://img.shields.io/docsrs/http-cache-surf?style=for-the-badge)](https://docs.rs/http-cache-surf) [![Codecov](https://img.shields.io/codecov/c/github/06chaynes/http-cache?style=for-the-badge)](https://app.codecov.io/gh/06chaynes/http-cache) ![Crates.io](https://img.shields.io/crates/l/http-cache-surf?style=for-the-badge) A caching middleware that follows HTTP caching rules, thanks to [http-cache-semantics](https://github.com/kornelski/rusty-http-cache-semantics). By default, it uses [cacache](https://github.com/zkat/cacache-rs) as the backend cache manager. Should likely be registered after any middleware modifying the request. ## Minimum Supported Rust Version (MSRV) 1.67.1 ## Install With [cargo add](https://github.com/killercup/cargo-edit#Installation) installed : ```sh cargo add http-cache-surf ``` ## Example ```rust use http_cache_surf::{Cache, CacheMode, CACacheManager, HttpCache, HttpCacheOptions}; #[async_std::main] async fn main() -> surf::Result<()> { let req = surf::get("https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching"); surf::client() .with(Cache(HttpCache { mode: CacheMode::Default, manager: CACacheManager::default(), options: HttpCacheOptions::default(), })) .send(req) .await?; Ok(()) } ``` ## Features The following features are available. By default `manager-cacache` is enabled. - `manager-cacache` (default): enable [cacache](https://github.com/zkat/cacache-rs), a high-performance disk cache, backend manager. - `manager-moka` (disabled): enable [moka](https://github.com/moka-rs/moka), a high-performance in-memory cache, backend manager. ## Documentation - [API Docs](https://docs.rs/http-cache-surf) ## License Licensed under either of - Apache License, Version 2.0 ([LICENSE-APACHE](https://github.com/06chaynes/http-cache/blob/main/LICENSE-APACHE) or ) - MIT license ([LICENSE-MIT](https://github.com/06chaynes/http-cache/blob/main/LICENSE-MIT) or ) 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.