@@ -89,46 +89,11 @@ impl ValidateNamedFields {
8989 }
9090
9191 fn error_type ( & self ) -> ( TokenStream , TokenStream ) {
92- let visibility = & self . visibility ;
93- let ident = & self . ident ;
94- let error_ident = & self . error_ident ;
95-
96- let mut error_field_idents = vec ! [ ] ;
97- let mut error_field_types = vec ! [ ] ;
98- let mut error_field_enums = vec ! [ ] ;
99-
100- for field in & self . fields {
101- let field_error_ident = field. error_ident ( ) ;
102- let ( field_error_type, field_error_enum) = field. error_type ( ident) ;
103-
104- error_field_idents. push ( field_error_ident. clone ( ) ) ;
105- error_field_types. push ( field_error_type) ;
106- if let Some ( error_enum) = field_error_enum {
107- error_field_enums. push ( error_enum) ;
108- }
109- }
110-
111- (
112- error_ident. to_token_stream ( ) ,
113- quote ! {
114- #[ allow( dead_code) ]
115- #[ derive( Debug ) ]
116- #visibility enum #error_ident {
117- #( #error_field_idents( #error_field_types) ) , *
118- }
119-
120- #[ automatically_derived]
121- impl :: std:: fmt:: Display for #error_ident {
122- fn fmt( & self , f: & mut :: std:: fmt:: Formatter <' _>) -> :: std:: fmt:: Result {
123- write!( f, "{self:#?}" )
124- }
125- }
126-
127- #[ automatically_derived]
128- impl :: std:: error:: Error for #error_ident { }
129-
130- #( #error_field_enums ) *
131- } ,
92+ error_type (
93+ & self . visibility ,
94+ & self . ident ,
95+ & self . error_ident ,
96+ self . fields . iter ( ) ,
13297 )
13398 }
13499
@@ -181,46 +146,11 @@ impl ValidateUnnamedFields {
181146 }
182147
183148 fn error_type ( & self ) -> ( TokenStream , TokenStream ) {
184- let visibility = & self . visibility ;
185- let ident = & self . ident ;
186- let error_ident = & self . error_ident ;
187-
188- let mut error_field_idents = vec ! [ ] ;
189- let mut error_field_types = vec ! [ ] ;
190- let mut error_field_enums = vec ! [ ] ;
191-
192- for field in & self . fields {
193- let field_error_ident = field. error_ident ( ) ;
194- let ( field_error_type, field_error_enum) = field. error_type ( ident) ;
195-
196- error_field_idents. push ( field_error_ident. clone ( ) ) ;
197- error_field_types. push ( field_error_type) ;
198- if let Some ( error_enum) = field_error_enum {
199- error_field_enums. push ( error_enum) ;
200- }
201- }
202-
203- (
204- error_ident. to_token_stream ( ) ,
205- quote ! {
206- #[ allow( dead_code) ]
207- #[ derive( Debug ) ]
208- #visibility enum #error_ident {
209- #( #error_field_idents( #error_field_types) ) , *
210- }
211-
212- #[ automatically_derived]
213- impl :: std:: fmt:: Display for #error_ident {
214- fn fmt( & self , f: & mut :: std:: fmt:: Formatter <' _>) -> :: std:: fmt:: Result {
215- write!( f, "{self:#?}" )
216- }
217- }
218-
219- #[ automatically_derived]
220- impl :: std:: error:: Error for #error_ident { }
221-
222- #( #error_field_enums ) *
223- } ,
149+ error_type (
150+ & self . visibility ,
151+ & self . ident ,
152+ & self . error_ident ,
153+ self . fields . iter ( ) ,
224154 )
225155 }
226156
@@ -258,6 +188,51 @@ impl ValidateUnitFields {
258188 }
259189}
260190
191+ fn error_type < ' a > (
192+ visibility : & Visibility ,
193+ ident : & Ident ,
194+ error_ident : & Ident ,
195+ fields : impl Iterator < Item = & ' a ValidateField > ,
196+ ) -> ( TokenStream , TokenStream ) {
197+ let mut error_field_idents = vec ! [ ] ;
198+ let mut error_field_types = vec ! [ ] ;
199+ let mut error_field_enums = vec ! [ ] ;
200+
201+ for field in fields {
202+ let field_error_ident = field. error_ident ( ) ;
203+ let ( field_error_type, field_error_enum) = field. error_type ( ident) ;
204+
205+ error_field_idents. push ( field_error_ident. clone ( ) ) ;
206+ error_field_types. push ( field_error_type) ;
207+ if let Some ( error_enum) = field_error_enum {
208+ error_field_enums. push ( error_enum) ;
209+ }
210+ }
211+
212+ (
213+ error_ident. to_token_stream ( ) ,
214+ quote ! {
215+ #[ allow( dead_code) ]
216+ #[ derive( Debug ) ]
217+ #visibility enum #error_ident {
218+ #( #error_field_idents( #error_field_types) ) , *
219+ }
220+
221+ #[ automatically_derived]
222+ impl :: std:: fmt:: Display for #error_ident {
223+ fn fmt( & self , f: & mut :: std:: fmt:: Formatter <' _>) -> :: std:: fmt:: Result {
224+ write!( f, "{self:#?}" )
225+ }
226+ }
227+
228+ #[ automatically_derived]
229+ impl :: std:: error:: Error for #error_ident { }
230+
231+ #( #error_field_enums ) *
232+ } ,
233+ )
234+ }
235+
261236fn validations < ' a > (
262237 execution : Execution ,
263238 field_prefix : ValidateFieldPrefix ,
0 commit comments