Standardize on u32 as the type of a variant index

This commit is contained in:
David Tolnay
2017-04-09 13:50:38 -07:00
parent a38b24136b
commit 52e93150e6
5 changed files with 39 additions and 33 deletions
+11 -5
View File
@@ -6,6 +6,8 @@ use fragment::{Fragment, Stmts, Match};
use internals::ast::{Body, Field, Item, Style, Variant};
use internals::{self, attr};
use std::u32;
pub fn expand_derive_serialize(item: &syn::DeriveInput) -> Result<Tokens, String> {
let ctxt = internals::Ctxt::new();
let item = Item::from_ast(&ctxt, item);
@@ -149,6 +151,8 @@ fn serialize_struct(ident: &syn::Ident,
fields: &[Field],
item_attrs: &attr::Item)
-> Fragment {
assert!(fields.len() as u64 <= u32::MAX as u64);
let serialize_fields =
serialize_struct_visitor(ident,
fields,
@@ -187,13 +191,15 @@ fn serialize_item_enum(ident: &syn::Ident,
variants: &[Variant],
item_attrs: &attr::Item)
-> Fragment {
assert!(variants.len() as u64 <= u32::MAX as u64);
let arms: Vec<_> = variants.iter()
.enumerate()
.map(|(variant_index, variant)| {
serialize_variant(ident,
generics,
variant,
variant_index,
variant_index as u32,
item_attrs)
})
.collect();
@@ -208,7 +214,7 @@ fn serialize_item_enum(ident: &syn::Ident,
fn serialize_variant(ident: &syn::Ident,
generics: &syn::Generics,
variant: &Variant,
variant_index: usize,
variant_index: u32,
item_attrs: &attr::Item)
-> Tokens {
let variant_ident = variant.ident.clone();
@@ -292,7 +298,7 @@ fn serialize_variant(ident: &syn::Ident,
fn serialize_externally_tagged_variant(ident: &syn::Ident,
generics: &syn::Generics,
variant: &Variant,
variant_index: usize,
variant_index: u32,
item_attrs: &attr::Item)
-> Fragment {
let type_name = item_attrs.name().serialize_name();
@@ -538,7 +544,7 @@ fn serialize_untagged_variant(ident: &syn::Ident,
enum TupleVariant {
ExternallyTagged {
type_name: String,
variant_index: usize,
variant_index: u32,
variant_name: String,
},
Untagged,
@@ -589,7 +595,7 @@ fn serialize_tuple_variant(context: TupleVariant,
enum StructVariant<'a> {
ExternallyTagged {
variant_index: usize,
variant_index: u32,
variant_name: String,
},
InternallyTagged { tag: &'a str, variant_name: String },