mirror of
https://github.com/tokio-rs/axum.git
synced 2025-09-30 14:31:16 +00:00
Add remaining routing methods
This commit is contained in:
parent
c0bf77cbe4
commit
90b9dffce7
116
src/routing.rs
116
src/routing.rs
@ -45,34 +45,60 @@ pub struct RouteAt<R> {
|
|||||||
pub(crate) route_spec: Bytes,
|
pub(crate) route_spec: Bytes,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro_rules! define_route_at_methods {
|
||||||
|
(
|
||||||
|
RouteAt:
|
||||||
|
$name:ident,
|
||||||
|
$svc_method_name:ident,
|
||||||
|
$method:ident
|
||||||
|
) => {
|
||||||
|
pub fn $name<F, B, T>(self, handler_fn: F) -> RouteBuilder<Or<HandlerSvc<F, B, T>, R>>
|
||||||
|
where
|
||||||
|
F: Handler<B, T>,
|
||||||
|
{
|
||||||
|
self.add_route(handler_fn, Method::$method)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn $svc_method_name<S, B>(self, service: S) -> RouteBuilder<Or<S, R>>
|
||||||
|
where
|
||||||
|
S: Service<Request<Body>, Response = Response<B>, Error = Infallible> + Clone,
|
||||||
|
{
|
||||||
|
self.add_route_service(service, Method::$method)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
(
|
||||||
|
RouteBuilder:
|
||||||
|
$name:ident,
|
||||||
|
$svc_method_name:ident,
|
||||||
|
$method:ident
|
||||||
|
) => {
|
||||||
|
pub fn $name<F, B, T>(self, handler_fn: F) -> RouteBuilder<Or<HandlerSvc<F, B, T>, R>>
|
||||||
|
where
|
||||||
|
F: Handler<B, T>,
|
||||||
|
{
|
||||||
|
self.app.at_bytes(self.route_spec).$name(handler_fn)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn $svc_method_name<S, B>(self, service: S) -> RouteBuilder<Or<S, R>>
|
||||||
|
where
|
||||||
|
S: Service<Request<Body>, Response = Response<B>, Error = Infallible> + Clone,
|
||||||
|
{
|
||||||
|
self.app.at_bytes(self.route_spec).$svc_method_name(service)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
impl<R> RouteAt<R> {
|
impl<R> RouteAt<R> {
|
||||||
pub fn get<F, B, T>(self, handler_fn: F) -> RouteBuilder<Or<HandlerSvc<F, B, T>, R>>
|
define_route_at_methods!(RouteAt: get, get_service, GET);
|
||||||
where
|
define_route_at_methods!(RouteAt: post, post_service, POST);
|
||||||
F: Handler<B, T>,
|
define_route_at_methods!(RouteAt: put, put_service, PUT);
|
||||||
{
|
define_route_at_methods!(RouteAt: patch, patch_service, PATCH);
|
||||||
self.add_route(handler_fn, Method::GET)
|
define_route_at_methods!(RouteAt: delete, delete_service, DELETE);
|
||||||
}
|
define_route_at_methods!(RouteAt: head, head_service, HEAD);
|
||||||
|
define_route_at_methods!(RouteAt: options, options_service, OPTIONS);
|
||||||
pub fn get_service<S, B>(self, service: S) -> RouteBuilder<Or<S, R>>
|
define_route_at_methods!(RouteAt: connect, connect_service, CONNECT);
|
||||||
where
|
define_route_at_methods!(RouteAt: trace, trace_service, TRACE);
|
||||||
S: Service<Request<Body>, Response = Response<B>, Error = Infallible> + Clone,
|
|
||||||
{
|
|
||||||
self.add_route_service(service, Method::GET)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn post<F, B, T>(self, handler_fn: F) -> RouteBuilder<Or<HandlerSvc<F, B, T>, R>>
|
|
||||||
where
|
|
||||||
F: Handler<B, T>,
|
|
||||||
{
|
|
||||||
self.add_route(handler_fn, Method::POST)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn post_service<S, B>(self, service: S) -> RouteBuilder<Or<S, R>>
|
|
||||||
where
|
|
||||||
S: Service<Request<Body>, Response = Response<B>, Error = Infallible> + Clone,
|
|
||||||
{
|
|
||||||
self.add_route_service(service, Method::POST)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn add_route<H, B, T>(
|
fn add_route<H, B, T>(
|
||||||
self,
|
self,
|
||||||
@ -130,33 +156,15 @@ impl<R> RouteBuilder<R> {
|
|||||||
self.app.at(route_spec)
|
self.app.at(route_spec)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get<F, B, T>(self, handler_fn: F) -> RouteBuilder<Or<HandlerSvc<F, B, T>, R>>
|
define_route_at_methods!(RouteBuilder: get, get_service, GET);
|
||||||
where
|
define_route_at_methods!(RouteBuilder: post, post_service, POST);
|
||||||
F: Handler<B, T>,
|
define_route_at_methods!(RouteBuilder: put, put_service, PUT);
|
||||||
{
|
define_route_at_methods!(RouteBuilder: patch, patch_service, PATCH);
|
||||||
self.app.at_bytes(self.route_spec).get(handler_fn)
|
define_route_at_methods!(RouteBuilder: delete, delete_service, DELETE);
|
||||||
}
|
define_route_at_methods!(RouteBuilder: head, head_service, HEAD);
|
||||||
|
define_route_at_methods!(RouteBuilder: options, options_service, OPTIONS);
|
||||||
pub fn get_service<S, B>(self, service: S) -> RouteBuilder<Or<S, R>>
|
define_route_at_methods!(RouteBuilder: connect, connect_service, CONNECT);
|
||||||
where
|
define_route_at_methods!(RouteBuilder: trace, trace_service, TRACE);
|
||||||
S: Service<Request<Body>, Response = Response<B>, Error = Infallible> + Clone,
|
|
||||||
{
|
|
||||||
self.app.at_bytes(self.route_spec).get_service(service)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn post<F, B, T>(self, handler_fn: F) -> RouteBuilder<Or<HandlerSvc<F, B, T>, R>>
|
|
||||||
where
|
|
||||||
F: Handler<B, T>,
|
|
||||||
{
|
|
||||||
self.app.at_bytes(self.route_spec).post(handler_fn)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn post_service<S, B>(self, service: S) -> RouteBuilder<Or<S, R>>
|
|
||||||
where
|
|
||||||
S: Service<Request<Body>, Response = Response<B>, Error = Infallible> + Clone,
|
|
||||||
{
|
|
||||||
self.app.at_bytes(self.route_spec).post_service(service)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_service(self) -> IntoService<R> {
|
pub fn into_service(self) -> IntoService<R> {
|
||||||
IntoService { app: self.app }
|
IntoService { app: self.app }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user