@@ -2,7 +2,7 @@ use std::iter::empty;
22
33use proc_macro2:: { Literal , TokenStream } ;
44use quote:: quote;
5- use syn:: { Fields , FieldsNamed , FieldsUnnamed , Ident , Result , Visibility } ;
5+ use syn:: { Fields , FieldsNamed , FieldsUnnamed , Generics , Ident , Result , Visibility } ;
66
77use crate :: {
88 validate:: {
@@ -22,14 +22,19 @@ pub enum ValidateFields<'a> {
2222}
2323
2424impl < ' a > ValidateFields < ' a > {
25- pub fn parse ( visibility : & ' a Visibility , ident : Ident , fields : & ' a Fields ) -> Result < Self > {
25+ pub fn parse (
26+ visibility : & ' a Visibility ,
27+ generics : & ' a Generics ,
28+ ident : Ident ,
29+ fields : & ' a Fields ,
30+ ) -> Result < Self > {
2631 Ok ( match fields {
27- Fields :: Named ( fields) => {
28- Self :: Named ( ValidateNamedFields :: parse ( visibility, ident, fields) ? )
29- }
30- Fields :: Unnamed ( fields) => {
31- Self :: Unnamed ( ValidateUnnamedFields :: parse ( visibility, ident, fields) ? )
32- }
32+ Fields :: Named ( fields) => Self :: Named ( ValidateNamedFields :: parse (
33+ visibility, generics , ident, fields,
34+ ) ? ) ,
35+ Fields :: Unnamed ( fields) => Self :: Unnamed ( ValidateUnnamedFields :: parse (
36+ visibility, generics , ident, fields,
37+ ) ? ) ,
3338 Fields :: Unit => Self :: Unit ( ValidateUnitFields :: parse ( visibility, ident) ?) ,
3439 } )
3540 }
@@ -94,7 +99,12 @@ pub struct ValidateNamedFields<'a> {
9499}
95100
96101impl < ' a > ValidateNamedFields < ' a > {
97- fn parse ( visibility : & ' a Visibility , ident : Ident , fields : & ' a FieldsNamed ) -> Result < Self > {
102+ fn parse (
103+ visibility : & ' a Visibility ,
104+ generics : & ' a Generics ,
105+ ident : Ident ,
106+ fields : & ' a FieldsNamed ,
107+ ) -> Result < Self > {
98108 let error_ident = format_error_ident ( & ident) ;
99109
100110 let mut result = Self {
@@ -111,6 +121,7 @@ impl<'a> ValidateNamedFields<'a> {
111121
112122 result. fields . push ( ValidateField :: parse (
113123 visibility,
124+ generics,
114125 & result. ident ,
115126 LiteralOrIdent :: Ident ( field_ident. clone ( ) ) ,
116127 field,
@@ -173,7 +184,12 @@ pub struct ValidateUnnamedFields<'a> {
173184}
174185
175186impl < ' a > ValidateUnnamedFields < ' a > {
176- fn parse ( visibility : & ' a Visibility , ident : Ident , fields : & ' a FieldsUnnamed ) -> Result < Self > {
187+ fn parse (
188+ visibility : & ' a Visibility ,
189+ generics : & ' a Generics ,
190+ ident : Ident ,
191+ fields : & ' a FieldsUnnamed ,
192+ ) -> Result < Self > {
177193 let error_ident = format_error_ident ( & ident) ;
178194
179195 let mut result = Self {
@@ -186,6 +202,7 @@ impl<'a> ValidateUnnamedFields<'a> {
186202 for ( index, field) in fields. unnamed . iter ( ) . enumerate ( ) {
187203 result. fields . push ( ValidateField :: parse (
188204 visibility,
205+ generics,
189206 & result. ident ,
190207 LiteralOrIdent :: Literal ( Literal :: usize_unsuffixed ( index) ) ,
191208 field,
0 commit comments