diff --git a/core/codegen/src/attribute/route/mod.rs b/core/codegen/src/attribute/route/mod.rs index 8003dda430..38493ec382 100644 --- a/core/codegen/src/attribute/route/mod.rs +++ b/core/codegen/src/attribute/route/mod.rs @@ -334,6 +334,13 @@ fn codegen_route(route: Route) -> Result { let rank = Optional(route.attr.rank); let format = Optional(route.attr.format.as_ref()); + let route_name = match &route.attr.name { + Some(name) => quote! { #name }, + None => { + quote! { stringify!(#handler_fn_name) } + } + }; + Ok(quote! { #handler_fn @@ -361,7 +368,7 @@ fn codegen_route(route: Route) -> Result { } #_route::StaticInfo { - name: stringify!(#handler_fn_name), + name: #route_name, method: #method, uri: #uri, handler: monomorphized_function, @@ -419,6 +426,7 @@ fn incomplete_route( data: method_attribute.data, format: method_attribute.format, rank: method_attribute.rank, + name: method_attribute.name, }; codegen_route(Route::from(attribute, function)?) diff --git a/core/codegen/src/attribute/route/parse.rs b/core/codegen/src/attribute/route/parse.rs index 59cbd4e34d..194e43bebc 100644 --- a/core/codegen/src/attribute/route/parse.rs +++ b/core/codegen/src/attribute/route/parse.rs @@ -47,6 +47,7 @@ pub struct Attribute { pub data: Option>, pub format: Option, pub rank: Option, + pub name: Option, } /// The parsed `#[method(..)]` (e.g, `get`, `put`, etc.) attribute. @@ -57,6 +58,7 @@ pub struct MethodAttribute { pub data: Option>, pub format: Option, pub rank: Option, + pub name: Option, } #[derive(Debug)] diff --git a/core/lib/src/lib.rs b/core/lib/src/lib.rs index f3a11ddf33..585a8caabc 100644 --- a/core/lib/src/lib.rs +++ b/core/lib/src/lib.rs @@ -180,6 +180,7 @@ mod phase; #[doc(inline)] pub use crate::config::Config; #[doc(inline)] pub use crate::catcher::Catcher; #[doc(inline)] pub use crate::route::Route; +#[doc(inline)] pub use crate::router::Router; #[doc(hidden)] pub use either::Either; #[doc(inline)] pub use phase::{Phase, Build, Ignite, Orbit}; #[doc(inline)] pub use error::Error; diff --git a/core/lib/src/router/mod.rs b/core/lib/src/router/mod.rs index c0bbccfb6b..a8dc461ef2 100644 --- a/core/lib/src/router/mod.rs +++ b/core/lib/src/router/mod.rs @@ -4,5 +4,6 @@ mod router; mod collider; mod matcher; +pub use router::Router; pub(crate) use router::*; pub(crate) use collider::*; diff --git a/core/lib/src/router/router.rs b/core/lib/src/router/router.rs index 5617f4fbcd..b7ed93f414 100644 --- a/core/lib/src/router/router.rs +++ b/core/lib/src/router/router.rs @@ -7,7 +7,7 @@ use crate::{Route, Catcher}; use crate::router::Collide; #[derive(Debug, Default)] -pub(crate) struct Router { +pub struct Router { routes: HashMap>, catchers: HashMap, Vec>, }