This article isn't finished. Read Middleware CONCEPT to learn more about middlewares.

Teo supports custom first-in-last-out middlewares.

declare middleware timing
middlewares [timing]

Implement the middleware in code:

app.main_namespace_mut().define_middleware("timing", |arguments: Arguments| {
    Ok(middleware_wrap_fn(move |ctx: Ctx, next: &'static dyn Next| async move {
        let start = SystemTime::now();
        let res = next.call(ctx).await?;
        let end = SystemTime::now();
        let duration = end.duration_since(start).unwrap();
        println!("request duration: {:?}", duration);
        return Ok(res);