Simplify iteration of struct fields in codegen
diff --git a/codegen/src/main.rs b/codegen/src/main.rs
index 9e13f78..bb7896f 100644
--- a/codegen/src/main.rs
+++ b/codegen/src/main.rs
@@ -813,29 +813,14 @@
                 });
             }
             Data::Struct(ref v) => {
-                let fields: Vec<(&Field, TokenStream)> = match v.fields {
-                    Fields::Named(ref fields) => fields
-                        .named
-                        .iter()
-                        .map(|el| {
-                            let id = el.ident.clone();
-                            (el, quote!(_i.#id))
-                        }).collect(),
-                    Fields::Unnamed(ref fields) => fields
-                        .unnamed
-                        .iter()
-                        .enumerate()
-                        .map(|(idx, el)| {
-                            let id = Index::from(idx);
-                            (el, quote!(_i.#id))
-                        }).collect(),
-                    Fields::Unit => Vec::new(),
-                };
-
                 let mut fold_fields = TokenStream::new();
 
-                for (field, ref_toks) in fields {
-                    let ref_toks = Owned(ref_toks);
+                for (idx, field) in v.fields.iter().enumerate() {
+                    let id = match field.ident {
+                        Some(ref ident) => Member::Named(ident.clone()),
+                        None => Member::Unnamed(Index::from(idx)),
+                    };
+                    let ref_toks = Owned(quote!(_i.#id));
                     let visit_field = visit(&field.ty, lookup, Visit, &ref_toks)
                         .unwrap_or_else(|| noop_visit(Visit, &ref_toks));
                     visit_impl.append_all(quote! {