mirror of
https://github.com/tokio-rs/axum.git
synced 2026-09-09 00:00:12 +02:00
Give better error if generics are used with #[derive(FromRef)] (#1874)
This commit is contained in:
@@ -8,12 +8,22 @@ use syn::{
|
||||
|
||||
use crate::attr_parsing::{combine_unary_attribute, parse_attrs, Combine};
|
||||
|
||||
pub(crate) fn expand(item: ItemStruct) -> TokenStream {
|
||||
item.fields
|
||||
pub(crate) fn expand(item: ItemStruct) -> syn::Result<TokenStream> {
|
||||
if !item.generics.params.is_empty() {
|
||||
return Err(syn::Error::new_spanned(
|
||||
item.generics,
|
||||
"`#[derive(FromRef)]` doesn't support generics",
|
||||
));
|
||||
}
|
||||
|
||||
let tokens = item
|
||||
.fields
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(idx, field)| expand_field(&item.ident, idx, field))
|
||||
.collect()
|
||||
.collect();
|
||||
|
||||
Ok(tokens)
|
||||
}
|
||||
|
||||
fn expand_field(state: &Ident, idx: usize, field: &Field) -> TokenStream {
|
||||
|
||||
@@ -655,7 +655,7 @@ pub fn derive_typed_path(input: TokenStream) -> TokenStream {
|
||||
/// [`FromRef`]: https://docs.rs/axum/latest/axum/extract/trait.FromRef.html
|
||||
#[proc_macro_derive(FromRef, attributes(from_ref))]
|
||||
pub fn derive_from_ref(item: TokenStream) -> TokenStream {
|
||||
expand_with(item, |item| Ok(from_ref::expand(item)))
|
||||
expand_with(item, from_ref::expand)
|
||||
}
|
||||
|
||||
fn expand_with<F, I, K>(input: TokenStream, f: F) -> TokenStream
|
||||
|
||||
Reference in New Issue
Block a user