什么是std:serialize中的struct variant枚举?

时间:2014-12-05 08:45:07

标签: rust

我正在实施自己的serialize::{Encoder,Decoder}serialize::Encoder中有一个emit_enum_struct_variant方法。我想知道什么样的对象会触发这个方法。

我认为它的对象看起来像这样:

struct Point {
    x: int,
    y: int,
}

enum MyEnum {
    StructValue(Point),
}

实际按顺序触发这些方法:

emit_enum(name=MyEnum)
emit_enum_variant(v_name=StructValue,v_id=0,len=1)
emit_enum_variant_arg(a_idx=0)
emit_struct(name=Point,len=2)
emit_struct_field(f_name=x,f_idx=0)
emit_struct_field(f_name=y,f_idx=1)

1 个答案:

答案 0 :(得分:2)

Enum struct variant是此形式的枚举变体:

enum MyEnum {
    StructValue { x: int, y: int }
}

也就是说,枚举变体不是元组结构,而是常规结构。当枚举变体包含多个字段时,或者在语义上更正确时(例如,包含多个相同类型的字段的变体),这些变体偶尔会有用。