use axum::{Router, routing::MethodRouter};
mod internal;
pub mod presets;
pub use internal::{Middleware, MiddlewareStack, RouteMiddlewareExt, RouterMiddlewareExt};
pub use presets::{Cors, TrimStrings};
pub trait WithMiddleware {
fn middleware(self, middleware: impl Into<Middleware>) -> Self;
fn middlewares<I>(self, middlewares: Vec<I>) -> Self
where
I: Into<Middleware>;
}
impl WithMiddleware for MethodRouter {
fn middleware(self, middleware: impl Into<Middleware>) -> Self {
internal::RouteMiddlewareExt::with_middleware(self, middleware.into()).build()
}
fn middlewares<I>(self, middlewares: Vec<I>) -> Self
where
I: Into<Middleware>
{
internal::RouteMiddlewareExt::with_middlewares(
self,
middlewares.into_iter().map(Into::into).collect()
).build()
}
}
impl WithMiddleware for Router {
fn middleware(self, middleware: impl Into<Middleware>) -> Self {
internal::RouterMiddlewareExt::with_middleware(self, middleware.into())
}
fn middlewares<I>(self, middlewares: Vec<I>) -> Self
where
I: Into<Middleware>
{
internal::RouterMiddlewareExt::with_middlewares(
self,
middlewares.into_iter().map(Into::into).collect()
)
}
}