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