Give better error if generics are used with #[derive(FromRef)] (#1874)

This commit is contained in:
David Pedersen
2023-03-22 14:48:27 +01:00
committed by GitHub
parent 3fb67bf79d
commit cfb5df7050
5 changed files with 29 additions and 4 deletions
+13 -3
View File
@@ -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 {
+1 -1
View File
@@ -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