#http-request #middleware #conditional #basis #async-trait #extension #handle #response #conditional-middleware #always-ok

reqwest-conditional-middleware

A middleware wrapper that enables (or disables) a wrapped Reqwest middleware on a per-request basis

5 releases (3 breaking)

0.4.0 Nov 11, 2024
0.3.0 May 29, 2024
0.2.1 May 5, 2023
0.2.0 May 5, 2023
0.1.0 Jun 23, 2022

#68 in HTTP client

Download history 4180/week @ 2024-12-16 1188/week @ 2024-12-23 1998/week @ 2024-12-30 5571/week @ 2025-01-06 4590/week @ 2025-01-13 3937/week @ 2025-01-20 5607/week @ 2025-01-27 6826/week @ 2025-02-03 5300/week @ 2025-02-10 5347/week @ 2025-02-17 7315/week @ 2025-02-24 2484/week @ 2025-03-03 2764/week @ 2025-03-10 2776/week @ 2025-03-17 3127/week @ 2025-03-24 3249/week @ 2025-03-31

12,020 downloads per month
Used in 32 crates (25 directly)

MIT license

9KB
117 lines

reqwest-conditional-middleware

CI docs.rs

A middleware wrapper that enables (or disables) a wrapped Reqwest middleware on a per-request basis

Example

Usage of this crate depends on a few crates:

async-trait = "0.1.80"
http = "1"
reqwest = version = "0.12"
reqwest-conditional-middleware = "0.4.0"
reqwest-middleware = "0.4"

This is an example of a conditional middleware that short-circuits a middleware stack and returns OK whenever the request method is GET

use reqwest::{Request, Response};
use reqwest_conditional_middleware::ConditionalMiddleware;
use reqwest_middleware::{Middleware, Next, Result};
use task_local_extensions::Extensions;

struct AlwaysOk;

#[async_trait::async_trait]
impl Middleware for AlwaysOk {
    async fn handle(
        &self,
        _req: Request,
        _extensions: &mut Extensions,
        _next: Next<'_>,
    ) -> Result<Response> {
        let builder = http::Response::builder().status(http::StatusCode::OK);
        Ok(builder.body("").unwrap().into())
    }
}

let conditional = ConditionalMiddleware::new(
    AlwaysOk,
    |req: &Request| req.method() == http::Method::GET
);

Dependencies

~4–19MB
~192K SLoC