缩减宏路由代码
This commit is contained in:
parent
e9fd606dbd
commit
8a28c0e577
@ -28,25 +28,25 @@ pub fn route(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn get(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
route::gen_get_route(attr, item)
|
||||
route::gen_dyn_route(attr, item, "get")
|
||||
}
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn post(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
route::gen_post_route(attr, item)
|
||||
route::gen_dyn_route(attr, item, "post")
|
||||
}
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn put(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
route::gen_put_route(attr, item)
|
||||
route::gen_dyn_route(attr, item, "put")
|
||||
}
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn delete(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
route::gen_delete_route(attr, item)
|
||||
route::gen_dyn_route(attr, item, "delete")
|
||||
}
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn option(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
route::gen_option_route(attr, item)
|
||||
route::gen_dyn_route(attr, item, "option")
|
||||
}
|
@ -7,7 +7,8 @@ extern crate proc_macro;
|
||||
use parse::{Parse, ParseStream};
|
||||
use proc_macro::{Span, TokenStream}; use punctuated::Punctuated;
|
||||
// 用于处理宏输入
|
||||
use quote::quote; // 用于生成代码
|
||||
use quote::quote; use spanned::Spanned;
|
||||
// 用于生成代码
|
||||
use syn::*;
|
||||
|
||||
struct Args {
|
||||
@ -63,97 +64,23 @@ pub fn gen_route(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
expanded.into()
|
||||
}
|
||||
|
||||
pub fn gen_get_route(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
pub fn gen_dyn_route(attr: TokenStream, item: TokenStream, method: &str) -> TokenStream {
|
||||
let args = parse_macro_input!(attr as Args);
|
||||
let func = parse_macro_input!(item as ItemFn);
|
||||
|
||||
let vis = func.vis.clone();
|
||||
let ident = func.sig.ident.clone();
|
||||
|
||||
let route = args.get_arg(0).unwrap();
|
||||
|
||||
let expanded = quote! {
|
||||
#vis fn #ident () -> (&'static str, axum::routing::method_routing::MethodRouter) {
|
||||
#func
|
||||
|
||||
(#route, axum::routing::get(#ident))
|
||||
}
|
||||
};
|
||||
expanded.into()
|
||||
}
|
||||
|
||||
pub fn gen_post_route(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
let args = parse_macro_input!(attr as Args);
|
||||
let func = parse_macro_input!(item as ItemFn);
|
||||
|
||||
let vis = func.vis.clone();
|
||||
let ident = func.sig.ident.clone();
|
||||
|
||||
let route = args.get_arg(0).unwrap();
|
||||
|
||||
let expanded = quote! {
|
||||
#vis fn #ident () -> (&'static str, axum::routing::method_routing::MethodRouter) {
|
||||
#func
|
||||
|
||||
(#route, axum::routing::post(#ident))
|
||||
}
|
||||
};
|
||||
expanded.into()
|
||||
}
|
||||
|
||||
pub fn gen_delete_route(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
let args = parse_macro_input!(attr as Args);
|
||||
let func = parse_macro_input!(item as ItemFn);
|
||||
|
||||
let vis = func.vis.clone();
|
||||
let ident = func.sig.ident.clone();
|
||||
|
||||
let route = args.get_arg(0).unwrap();
|
||||
|
||||
let expanded = quote! {
|
||||
#vis fn #ident () -> (&'static str, axum::routing::method_routing::MethodRouter) {
|
||||
#func
|
||||
|
||||
(#route, axum::routing::delete(#ident))
|
||||
}
|
||||
};
|
||||
expanded.into()
|
||||
}
|
||||
|
||||
pub fn gen_put_route(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
let args = parse_macro_input!(attr as Args);
|
||||
let func = parse_macro_input!(item as ItemFn);
|
||||
|
||||
let vis = func.vis.clone();
|
||||
let ident = func.sig.ident.clone();
|
||||
|
||||
let route = args.get_arg(0).unwrap();
|
||||
|
||||
let expanded = quote! {
|
||||
#vis fn #ident () -> (&'static str, axum::routing::method_routing::MethodRouter) {
|
||||
#func
|
||||
|
||||
(#route, axum::routing::put(#ident))
|
||||
}
|
||||
};
|
||||
expanded.into()
|
||||
}
|
||||
let method_name: Ident = Ident::new(method, route.span());
|
||||
|
||||
pub fn gen_option_route(attr: TokenStream, item: TokenStream) -> TokenStream {
|
||||
let args = parse_macro_input!(attr as Args);
|
||||
let func = parse_macro_input!(item as ItemFn);
|
||||
|
||||
let vis = func.vis.clone();
|
||||
let ident = func.sig.ident.clone();
|
||||
|
||||
let route = args.get_arg(0).unwrap();
|
||||
|
||||
let expanded = quote! {
|
||||
#vis fn #ident () -> (&'static str, axum::routing::method_routing::MethodRouter) {
|
||||
#func
|
||||
|
||||
(#route, axum::routing::option(#ident))
|
||||
}
|
||||
};
|
||||
#vis fn #ident () -> (&'static str, axum::routing::method_routing::MethodRouter) {
|
||||
#func
|
||||
|
||||
(#route, axum::routing::#method_name(#ident))
|
||||
}
|
||||
};
|
||||
expanded.into()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user