Condense representation of variants in json
diff --git a/codegen/src/gen.rs b/codegen/src/gen.rs
index a51a800..cb4bab6 100644
--- a/codegen/src/gen.rs
+++ b/codegen/src/gen.rs
@@ -406,10 +406,10 @@
                 let mut visit_mut_variants = TokenStream::new();
                 let mut fold_variants = TokenStream::new();
 
-                for variant in variants {
-                    let variant_ident = Ident::new(&variant.ident, Span::call_site());
+                for (variant, fields) in variants {
+                    let variant_ident = Ident::new(variant, Span::call_site());
 
-                    if variant.fields.is_empty() {
+                    if fields.is_empty() {
                         visit_variants.append_all(quote! {
                             #ty::#variant_ident => {}
                         });
@@ -430,7 +430,7 @@
                         let mut visit_mut_fields = TokenStream::new();
                         let mut fold_fields = TokenStream::new();
 
-                        for (idx, ty) in variant.fields.iter().enumerate() {
+                        for (idx, ty) in fields.iter().enumerate() {
                             let name = format!("_binding_{}", idx);
                             let binding = Ident::new(&name, Span::call_site());
 
diff --git a/codegen/src/parse.rs b/codegen/src/parse.rs
index cdfc7e0..c7a087d 100644
--- a/codegen/src/parse.rs
+++ b/codegen/src/parse.rs
@@ -72,7 +72,7 @@
     item: &syn::DataEnum,
     items: &ItemLookup,
     tokens: &TokenLookup,
-) -> Vec<types::Variant> {
+) -> types::Variants {
     item.variants
         .iter()
         .map(|variant| {
@@ -86,10 +86,7 @@
                 _ => panic!("Enum representation not supported"),
             };
 
-            types::Variant {
-                ident: variant.ident.to_string(),
-                fields,
-            }
+            (variant.ident.to_string(), fields)
         })
         .collect()
 }
@@ -98,7 +95,7 @@
     item: &syn::DataStruct,
     items: &ItemLookup,
     tokens: &TokenLookup,
-) -> IndexMap<String, types::Type> {
+) -> types::Fields {
     match &item.fields {
         syn::Fields::Named(fields) => fields
             .named
diff --git a/codegen/src/types.rs b/codegen/src/types.rs
index 7be3487..1e9eedf 100644
--- a/codegen/src/types.rs
+++ b/codegen/src/types.rs
@@ -25,16 +25,13 @@
 pub enum Data {
     Private,
     #[serde(rename = "fields")]
-    Struct(IndexMap<String, Type>),
+    Struct(Fields),
     #[serde(rename = "variants")]
-    Enum(Vec<Variant>),
+    Enum(Variants),
 }
 
-#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
-pub struct Variant {
-    pub ident: String,
-    pub fields: Vec<Type>,
-}
+pub type Fields = IndexMap<String, Type>;
+pub type Variants = IndexMap<String, Vec<Type>>;
 
 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
 #[serde(rename_all = "lowercase")]