aboutsummaryrefslogtreecommitdiff
path: root/rossweisse/src/implementations/router/methods.rs
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-05-04 07:59:50 +0000
committerFuwn <[email protected]>2023-05-04 07:59:50 +0000
commit870ae2237e494a275f8552707084559b6abff376 (patch)
treef9676cfad7e2346355dde3917f8d6a9a7870cd25 /rossweisse/src/implementations/router/methods.rs
parentdeps(rossweisse): pin to 0.0.0 (diff)
downloadwindmark-870ae2237e494a275f8552707084559b6abff376.tar.xz
windmark-870ae2237e494a275f8552707084559b6abff376.zip
feat(methods): special index handling
Diffstat (limited to 'rossweisse/src/implementations/router/methods.rs')
-rw-r--r--rossweisse/src/implementations/router/methods.rs45
1 files changed, 34 insertions, 11 deletions
diff --git a/rossweisse/src/implementations/router/methods.rs b/rossweisse/src/implementations/router/methods.rs
index 4f9bbdf..2ae4086 100644
--- a/rossweisse/src/implementations/router/methods.rs
+++ b/rossweisse/src/implementations/router/methods.rs
@@ -17,21 +17,35 @@
use proc_macro::TokenStream;
-pub fn methods(_arguments: TokenStream, item: syn::ItemImpl) -> TokenStream {
+pub fn methods(
+ _arguments: TokenStream,
+ mut item: syn::ItemImpl,
+) -> TokenStream {
let routes = item
.items
- .iter()
+ .iter_mut()
.filter_map(|item| {
if let syn::ImplItem::Fn(method) = item {
- if method
- .attrs
- .iter()
- .any(|attribute| attribute.path().is_ident("route"))
- {
- Some(method.sig.ident.clone())
- } else {
- None
+ for attribute in method.attrs.iter() {
+ if attribute.path().is_ident("route") {
+ let arguments = quote::ToTokens::into_token_stream(attribute)
+ .to_string()
+ .trim_end_matches(")]")
+ .trim_start_matches("#[route(")
+ .to_string();
+
+ if arguments == "index" {
+ method.sig.ident =
+ syn::Ident::new("__router_index", method.sig.ident.span());
+ }
+
+ return Some(method.sig.ident.clone());
+ } else {
+ return None;
+ }
}
+
+ None
} else {
None
}
@@ -42,7 +56,16 @@ pub fn methods(_arguments: TokenStream, item: syn::ItemImpl) -> TokenStream {
let name = &item.self_ty;
let route_paths = routes
.iter()
- .map(|route| format!("/{}", route))
+ .map(|route| {
+ format!(
+ "/{}",
+ if route == "__router_index" {
+ "".to_string()
+ } else {
+ route.to_string()
+ }
+ )
+ })
.collect::<Vec<_>>();
quote::quote! {