diff --git a/macro/src/lib.rs b/macro/src/lib.rs index 41eb281..fcf2ce2 100644 --- a/macro/src/lib.rs +++ b/macro/src/lib.rs @@ -21,6 +21,11 @@ pub fn responsable(input: TokenStream) -> TokenStream { responsable::gen_responsable(input) } +#[proc_macro_attribute] +pub fn route(attr: TokenStream, item: TokenStream) -> TokenStream { + route::gen_route(attr, item) +} + #[proc_macro_attribute] pub fn get(attr: TokenStream, item: TokenStream) -> TokenStream { route::gen_get_route(attr, item) diff --git a/macro/src/route.rs b/macro/src/route.rs index 5f0651e..310e783 100644 --- a/macro/src/route.rs +++ b/macro/src/route.rs @@ -25,18 +25,8 @@ impl Parse for Args { } impl Args { - pub fn get_method(&self) -> syn::Result { - match self.vars.get(0) { - Some(var) => Ok(var.clone()), - None => return Err(syn::Error::new( - Span::call_site().into(), - "No Method was provided" - )) - } - } - - pub fn get_route(&self) -> syn::Result { - match self.vars.get(0) { + pub fn get_arg(&self, index: usize) -> syn::Result { + match self.vars.get(index) { Some(var) => Ok(var.clone()), None => return Err(syn::Error::new( Span::call_site().into(), @@ -54,8 +44,8 @@ pub fn gen_route(attr: TokenStream, item: TokenStream) -> TokenStream { let vis = func.vis.clone(); let ident = func.sig.ident.clone(); - let method = args.get_method().unwrap(); - let route = args.get_route().unwrap(); + let method = args.get_arg(0).unwrap(); + let route = args.get_arg(1).unwrap(); let expanded = quote! { #[allow(non_camel_case_types)] @@ -80,7 +70,7 @@ pub fn gen_get_route(attr: TokenStream, item: TokenStream) -> TokenStream { let vis = func.vis.clone(); let ident = func.sig.ident.clone(); - let route = args.get_route().unwrap(); + let route = args.get_arg(0).unwrap(); let expanded = quote! { #vis fn #ident () -> (&'static str, axum::routing::method_routing::MethodRouter) { @@ -99,7 +89,7 @@ pub fn gen_post_route(attr: TokenStream, item: TokenStream) -> TokenStream { let vis = func.vis.clone(); let ident = func.sig.ident.clone(); - let route = args.get_route().unwrap(); + let route = args.get_arg(0).unwrap(); let expanded = quote! { #vis fn #ident () -> (&'static str, axum::routing::method_routing::MethodRouter) { @@ -118,7 +108,7 @@ pub fn gen_delete_route(attr: TokenStream, item: TokenStream) -> TokenStream { let vis = func.vis.clone(); let ident = func.sig.ident.clone(); - let route = args.get_route().unwrap(); + let route = args.get_arg(0).unwrap(); let expanded = quote! { #vis fn #ident () -> (&'static str, axum::routing::method_routing::MethodRouter) { @@ -137,7 +127,7 @@ pub fn gen_put_route(attr: TokenStream, item: TokenStream) -> TokenStream { let vis = func.vis.clone(); let ident = func.sig.ident.clone(); - let route = args.get_route().unwrap(); + let route = args.get_arg(0).unwrap(); let expanded = quote! { #vis fn #ident () -> (&'static str, axum::routing::method_routing::MethodRouter) { @@ -156,7 +146,7 @@ pub fn gen_option_route(attr: TokenStream, item: TokenStream) -> TokenStream { let vis = func.vis.clone(); let ident = func.sig.ident.clone(); - let route = args.get_route().unwrap(); + let route = args.get_arg(0).unwrap(); let expanded = quote! { #vis fn #ident () -> (&'static str, axum::routing::method_routing::MethodRouter) { diff --git a/server/src/controller/mod.rs b/server/src/controller/mod.rs index e5b8064..87770fa 100644 --- a/server/src/controller/mod.rs +++ b/server/src/controller/mod.rs @@ -6,11 +6,12 @@ pub mod feedback_controller; pub fn init() -> Router { Router::new() + // 用户登录、用户管理相关路由 .typed_route(account_controller::authenticate_google) .typed_route(account_controller::authenticate_with_password) .typed_route(account_controller::refresh_token) + // 反馈相关路由 .typed_route(feedback_controller::add_feedback) .typed_route(feedback_controller::get_feedback_list_by_page) .typed_route(feedback_controller::get_feedback_list) } -