@@ -6,14 +6,14 @@ use syn::punctuated::Punctuated;
66use syn:: visit_mut:: VisitMut ;
77use syn:: { Expr , FieldsNamed , FieldsUnnamed , Path , Result , Type } ;
88
9- pub enum Field {
10- Default { name : Ident , ty : Type } ,
9+ pub enum FieldFormat {
10+ Expression { name : Ident , ty : Type } ,
1111 Derived { name : Ident , ty : Type , expr : Expr } ,
1212}
1313
1414pub struct Fields {
1515 pub ( crate ) is_named : bool ,
16- pub ( crate ) fields : Vec < Field > ,
16+ pub ( crate ) fields_format : Vec < FieldFormat > ,
1717}
1818
1919pub fn parse_fields ( fields : & mut syn:: Fields ) -> Result < Fields > {
@@ -22,7 +22,7 @@ pub fn parse_fields(fields: &mut syn::Fields) -> Result<Fields> {
2222 syn:: Fields :: Unnamed ( unnamed_fields) => parse_unnamed_fields ( unnamed_fields) ,
2323 syn:: Fields :: Unit => Ok ( Fields {
2424 is_named : false ,
25- fields : Vec :: new ( ) ,
25+ fields_format : Vec :: new ( ) ,
2626 } ) ,
2727 }
2828}
@@ -33,7 +33,7 @@ fn parse_named_fields(fields: &mut FieldsNamed) -> Result<Fields> {
3333 } )
3434 . map ( |fields| Fields {
3535 is_named : true ,
36- fields,
36+ fields_format : fields,
3737 } )
3838}
3939
@@ -43,14 +43,14 @@ fn parse_unnamed_fields(fields: &mut FieldsUnnamed) -> Result<Fields> {
4343 } )
4444 . map ( |fields| Fields {
4545 is_named : false ,
46- fields,
46+ fields_format : fields,
4747 } )
4848}
4949
5050fn parse_field_iterator < ' a > (
5151 fields : impl Iterator < Item = & ' a mut syn:: Field > ,
5252 get_name : impl Fn ( usize , & syn:: Field ) -> Ident ,
53- ) -> Result < Vec < Field > > {
53+ ) -> Result < Vec < FieldFormat > > {
5454 let mut result = Vec :: new ( ) ;
5555
5656 for ( index, field) in fields. enumerate ( ) {
@@ -65,43 +65,34 @@ fn parse_field_iterator<'a>(
6565 {
6666 let expr = attr. parse_args :: < Expr > ( ) ?;
6767 field. attrs . remove ( ix) ;
68- result. push ( Field :: Derived { name, ty, expr } ) ;
68+ result. push ( FieldFormat :: Derived { name, ty, expr } ) ;
6969 } else {
70- result. push ( Field :: Default { name, ty } ) ;
70+ result. push ( FieldFormat :: Expression { name, ty } ) ;
7171 }
7272 }
7373
7474 Ok ( result)
7575}
7676
77- impl Field {
78- pub fn generate_expression ( & self ) -> Option < TokenStream > {
79- match self {
80- Field :: Default { name, ty } => Some ( quote ! {
81- let ( input, #name) : ( _, #ty) = nom_parse_trait:: ParseFrom :: parse( input) ?;
82- } ) ,
83- Field :: Derived { .. } => None ,
84- }
85- }
86-
77+ impl FieldFormat {
8778 pub fn get_name ( & self ) -> & Ident {
8879 match self {
89- Field :: Default { name, .. } => name,
90- Field :: Derived { name, .. } => name,
80+ FieldFormat :: Expression { name, .. } => name,
81+ FieldFormat :: Derived { name, .. } => name,
9182 }
9283 }
9384
9485 pub fn get_type ( & self ) -> & Type {
9586 match self {
96- Field :: Default { ty, .. } => ty,
97- Field :: Derived { ty, .. } => ty,
87+ FieldFormat :: Expression { ty, .. } => ty,
88+ FieldFormat :: Derived { ty, .. } => ty,
9889 }
9990 }
10091
10192 pub fn generate_derived_expression ( & self , fields : & Fields ) -> Option < TokenStream > {
10293 match self {
103- Field :: Default { .. } => None ,
104- Field :: Derived { expr, ty, .. } => {
94+ FieldFormat :: Expression { .. } => None ,
95+ FieldFormat :: Derived { expr, ty, .. } => {
10596 let name = self . get_param_name ( ) ;
10697 let mut expr = expr. clone ( ) ;
10798 fields. rename_derive_expr ( & mut expr) ;
@@ -120,39 +111,39 @@ impl Field {
120111impl Fields {
121112 pub fn get_creation_names ( & self ) -> Vec < TokenStream > {
122113 let transform = if self . is_named {
123- |field : & Field | {
114+ |field : & FieldFormat | {
124115 let name = field. get_name ( ) ;
125116 let param_name = field. get_param_name ( ) ;
126117 quote ! { #name: #param_name }
127118 }
128119 } else {
129- |field : & Field | {
120+ |field : & FieldFormat | {
130121 let name = field. get_param_name ( ) ;
131122 quote ! { #name }
132123 }
133124 } ;
134125
135- self . fields . iter ( ) . map ( transform) . collect ( )
126+ self . fields_format . iter ( ) . map ( transform) . collect ( )
136127 }
137128
138129 pub fn get_expression_names ( & self ) -> Vec < Ident > {
139- self . fields
130+ self . fields_format
140131 . iter ( )
141- . filter ( |field| !matches ! ( field, Field :: Derived { .. } ) )
142- . map ( Field :: get_param_name)
132+ . filter ( |field| !matches ! ( field, FieldFormat :: Derived { .. } ) )
133+ . map ( FieldFormat :: get_param_name)
143134 . collect ( )
144135 }
145136
146137 pub fn get_expression_types ( & self ) -> Vec < Type > {
147- self . fields
138+ self . fields_format
148139 . iter ( )
149- . filter ( |field| !matches ! ( field, Field :: Derived { .. } ) )
140+ . filter ( |field| !matches ! ( field, FieldFormat :: Derived { .. } ) )
150141 . map ( |field| field. get_type ( ) . clone ( ) )
151142 . collect ( )
152143 }
153144
154145 pub fn get_derived_expressions ( & self ) -> Vec < TokenStream > {
155- self . fields
146+ self . fields_format
156147 . iter ( )
157148 . filter_map ( |field| field. generate_derived_expression ( self ) )
158149 . collect ( )
@@ -199,9 +190,9 @@ impl Fields {
199190 }
200191
201192 let mapping = self
202- . fields
193+ . fields_format
203194 . iter ( )
204- . filter ( |field| !matches ! ( field, Field :: Derived { .. } ) )
195+ . filter ( |field| !matches ! ( field, FieldFormat :: Derived { .. } ) )
205196 . map ( |field| ( field. get_name ( ) . clone ( ) , field. get_param_name ( ) ) )
206197 . collect ( ) ;
207198
0 commit comments