mirror of
https://github.com/tokio-rs/axum.git
synced 2026-08-30 00:00:32 +02:00
Break things up a bit
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
use proc_macro2::{Span, TokenStream};
|
use proc_macro2::{Span, TokenStream};
|
||||||
use quote::{format_ident, quote_spanned};
|
use quote::{format_ident, quote, quote_spanned};
|
||||||
use syn::{ItemStruct, LitStr};
|
use syn::{ItemStruct, LitStr};
|
||||||
|
|
||||||
pub(crate) fn expand(item_struct: ItemStruct) -> syn::Result<TokenStream> {
|
pub(crate) fn expand(item_struct: ItemStruct) -> syn::Result<TokenStream> {
|
||||||
@@ -67,12 +67,14 @@ fn expand_named_fields(ident: &syn::Ident, path: LitStr, segments: &[Segment]) -
|
|||||||
let format_str = format_str_from_path(segments);
|
let format_str = format_str_from_path(segments);
|
||||||
let captures = captures_from_path(segments);
|
let captures = captures_from_path(segments);
|
||||||
|
|
||||||
quote_spanned! {path.span()=>
|
let typed_path_impl = quote_spanned! {path.span()=>
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
impl ::axum_extra::routing::TypedPath for #ident {
|
impl ::axum_extra::routing::TypedPath for #ident {
|
||||||
const PATH: &'static str = #path;
|
const PATH: &'static str = #path;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let display_impl = quote_spanned! {path.span()=>
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
impl ::std::fmt::Display for #ident {
|
impl ::std::fmt::Display for #ident {
|
||||||
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
||||||
@@ -80,7 +82,9 @@ fn expand_named_fields(ident: &syn::Ident, path: LitStr, segments: &[Segment]) -
|
|||||||
write!(f, #format_str, #(#captures = #captures,)*)
|
write!(f, #format_str, #(#captures = #captures,)*)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let from_request_impl = quote_spanned! {path.span()=>
|
||||||
#[::axum::async_trait]
|
#[::axum::async_trait]
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
impl<B> ::axum::extract::FromRequest<B> for #ident
|
impl<B> ::axum::extract::FromRequest<B> for #ident
|
||||||
@@ -93,6 +97,12 @@ fn expand_named_fields(ident: &syn::Ident, path: LitStr, segments: &[Segment]) -
|
|||||||
::axum::extract::Path::from_request(req).await.map(|path| path.0)
|
::axum::extract::Path::from_request(req).await.map(|path| path.0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
quote! {
|
||||||
|
#typed_path_impl
|
||||||
|
#display_impl
|
||||||
|
#from_request_impl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,12 +152,14 @@ fn expand_unnamed_fields(
|
|||||||
let format_str = format_str_from_path(segments);
|
let format_str = format_str_from_path(segments);
|
||||||
let captures = captures_from_path(segments);
|
let captures = captures_from_path(segments);
|
||||||
|
|
||||||
Ok(quote_spanned! {path.span()=>
|
let typed_path_impl = quote_spanned! {path.span()=>
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
impl ::axum_extra::routing::TypedPath for #ident {
|
impl ::axum_extra::routing::TypedPath for #ident {
|
||||||
const PATH: &'static str = #path;
|
const PATH: &'static str = #path;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let display_impl = quote_spanned! {path.span()=>
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
impl ::std::fmt::Display for #ident {
|
impl ::std::fmt::Display for #ident {
|
||||||
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
||||||
@@ -155,7 +167,9 @@ fn expand_unnamed_fields(
|
|||||||
write!(f, #format_str, #(#captures = #captures,)*)
|
write!(f, #format_str, #(#captures = #captures,)*)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let from_request_impl = quote! {
|
||||||
#[::axum::async_trait]
|
#[::axum::async_trait]
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
impl<B> ::axum::extract::FromRequest<B> for #ident
|
impl<B> ::axum::extract::FromRequest<B> for #ident
|
||||||
@@ -168,6 +182,12 @@ fn expand_unnamed_fields(
|
|||||||
::axum::extract::Path::from_request(req).await.map(|path| path.0)
|
::axum::extract::Path::from_request(req).await.map(|path| path.0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(quote! {
|
||||||
|
#typed_path_impl
|
||||||
|
#display_impl
|
||||||
|
#from_request_impl
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,19 +212,23 @@ fn expand_unit_fields(ident: &syn::Ident, path: LitStr) -> syn::Result<TokenStre
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(quote_spanned! {path.span()=>
|
let typed_path_impl = quote_spanned! {path.span()=>
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
impl ::axum_extra::routing::TypedPath for #ident {
|
impl ::axum_extra::routing::TypedPath for #ident {
|
||||||
const PATH: &'static str = #path;
|
const PATH: &'static str = #path;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let display_impl = quote_spanned! {path.span()=>
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
impl ::std::fmt::Display for #ident {
|
impl ::std::fmt::Display for #ident {
|
||||||
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
||||||
write!(f, #path)
|
write!(f, #path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let from_request_impl = quote! {
|
||||||
#[::axum::async_trait]
|
#[::axum::async_trait]
|
||||||
#[automatically_derived]
|
#[automatically_derived]
|
||||||
impl<B> ::axum::extract::FromRequest<B> for #ident
|
impl<B> ::axum::extract::FromRequest<B> for #ident
|
||||||
@@ -221,6 +245,12 @@ fn expand_unit_fields(ident: &syn::Ident, path: LitStr) -> syn::Result<TokenStre
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(quote! {
|
||||||
|
#typed_path_impl
|
||||||
|
#display_impl
|
||||||
|
#from_request_impl
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user