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")]