2 unstable releases

0.2.0 Jul 24, 2024
0.1.0 Dec 29, 2023

#542 in HTTP server

Download history 365/week @ 2024-08-23 510/week @ 2024-08-30 386/week @ 2024-09-06 287/week @ 2024-09-13 405/week @ 2024-09-20 356/week @ 2024-09-27 78/week @ 2024-10-04 58/week @ 2024-10-11 47/week @ 2024-10-18 34/week @ 2024-10-25 76/week @ 2024-11-01 20/week @ 2024-11-08 18/week @ 2024-11-15 18/week @ 2024-11-22 42/week @ 2024-11-29 52/week @ 2024-12-06

137 downloads per month
Used in 4 crates

Apache-2.0

32KB
858 lines

async traits for xitca


lib.rs:

traits for composable async functions.

Examples

use core::convert::Infallible;

use xitca_service::{fn_service, Service, ServiceExt};

// a middleware function that has ownership of the argument and output of S as Service
// trait implementor.
async fn middleware<S>(s: &S, req: String) -> Result<String, Infallible>
where
    S: Service<String, Response = String, Error = Infallible>
{
    let req2 = req.clone();
    let mut res = s.call(req).await?;
    assert_eq!(res, req2);
    res.push_str("-dagongren");
    Ok(res)
}

// apply middleware to async function as service.
let builder = fn_service(|req: String| async { Ok::<_, Infallible>(req) })
    .enclosed_fn(middleware);

// build the composited service.
let service = builder.call(()).await?;

// execute the service function with string argument.
let res = service.call("996".to_string()).await?;

assert_eq!(res, "996-dagongren");

No runtime deps