in avro/src/ser.rs [845:955]
fn test_to_value_struct_enum() -> TestResult {
let test = TestStructExternalEnum {
a: StructExternalEnum::Val1 { x: 1.0, y: 2.0 },
};
let expected = Value::Record(vec![(
"a".to_owned(),
Value::Record(vec![
("type".to_owned(), Value::Enum(0, "Val1".to_owned())),
(
"value".to_owned(),
Value::Union(
0,
Box::new(Value::Record(vec![
("x".to_owned(), Value::Float(1.0)),
("y".to_owned(), Value::Float(2.0)),
])),
),
),
]),
)]);
assert_eq!(
to_value(test)?,
expected,
"error serializing struct external enum"
);
// I don't think that this is feasible in avro
let test = TestStructInternalEnum {
a: StructInternalEnum::Val1 { x: 1.0, y: 2.0 },
};
let expected = Value::Record(vec![(
"a".to_owned(),
Value::Record(vec![
("type".to_owned(), Value::String("Val1".to_owned())),
("x".to_owned(), Value::Float(1.0)),
("y".to_owned(), Value::Float(2.0)),
]),
)]);
assert_eq!(
to_value(test)?,
expected,
"error serializing struct internal enum"
);
let test = TestStructAdjacentEnum {
a: StructAdjacentEnum::Val1 { x: 1.0, y: 2.0 },
};
let expected = Value::Record(vec![(
"a".to_owned(),
Value::Record(vec![
("t".to_owned(), Value::String("Val1".to_owned())),
(
"v".to_owned(),
Value::Record(vec![
("x".to_owned(), Value::Float(1.0)),
("y".to_owned(), Value::Float(2.0)),
]),
),
]),
)]);
assert_eq!(
to_value(test)?,
expected,
"error serializing struct adjacent enum"
);
let test = TestStructUntaggedEnum {
a: StructUntaggedEnum::Val1 { x: 1.0, y: 2.0 },
};
let expected = Value::Record(vec![(
"a".to_owned(),
Value::Record(vec![
("x".to_owned(), Value::Float(1.0)),
("y".to_owned(), Value::Float(2.0)),
]),
)]);
assert_eq!(
to_value(test)?,
expected,
"error serializing struct untagged enum"
);
let test = TestStructUntaggedEnum {
a: StructUntaggedEnum::Val2 {
x: 1.0,
y: 2.0,
z: 3.0,
},
};
let expected = Value::Record(vec![(
"a".to_owned(),
Value::Record(vec![
("x".to_owned(), Value::Float(1.0)),
("y".to_owned(), Value::Float(2.0)),
("z".to_owned(), Value::Float(3.0)),
]),
)]);
assert_eq!(
to_value(test)?,
expected,
"error serializing struct untagged enum variant"
);
Ok(())
}