Pass the variant fields and tuple lengths into visit_{enum,tuple,tuple_struct}

This commit is contained in:
Erick Tryzelaar
2015-07-29 12:04:31 -07:00
parent 35e2022e9a
commit 6c9cebdcc3
8 changed files with 93 additions and 39 deletions
+18 -3
View File
@@ -318,7 +318,7 @@ fn deserialize_tuple_struct(
}
}
deserializer.visit_tuple_struct($type_name, $visitor_expr)
deserializer.visit_tuple_struct($type_name, $fields, $visitor_expr)
})
}
@@ -489,6 +489,19 @@ fn deserialize_item_enum(
.collect()
);
let variants_expr = builder.expr().addr_of().slice()
.with_exprs(
enum_def.variants.iter()
.map(|variant| {
builder.expr().str(variant.node.name)
})
)
.build();
let variants_stmt = quote_stmt!(cx,
const VARIANTS: &'static [&'static str] = $variants_expr;
).unwrap();
// Match arms to extract a variant from a string
let variant_arms: Vec<_> = enum_def.variants.iter()
.enumerate()
@@ -535,7 +548,9 @@ fn deserialize_item_enum(
}
}
deserializer.visit_enum($type_name, $visitor_expr)
$variants_stmt
deserializer.visit_enum($type_name, VARIANTS, $visitor_expr)
})
}
@@ -626,7 +641,7 @@ fn deserialize_tuple_variant(
}
}
visitor.visit_seq($visitor_expr)
visitor.visit_seq($fields, $visitor_expr)
})
}