in avro/src/schema.rs [3414:3494]
fn test_avro_3370_record_schema_with_currently_parsing_schema_named_enum() -> TestResult {
let schema = Schema::parse_str(
r#"
{
"type" : "record",
"name" : "record",
"fields" : [
{
"type" : "enum",
"name" : "enum",
"symbols": ["one", "two", "three"]
},
{ "name" : "next", "type" : "enum" }
]
}
"#,
)?;
let mut lookup = BTreeMap::new();
lookup.insert("enum".to_owned(), 0);
lookup.insert("next".to_owned(), 1);
let expected = Schema::Record(RecordSchema {
name: Name {
name: "record".to_owned(),
namespace: None,
},
aliases: None,
doc: None,
fields: vec![
RecordField {
name: "enum".to_string(),
doc: None,
default: None,
aliases: None,
schema: Schema::Enum(
EnumSchema::builder()
.name(Name::new("enum")?)
.symbols(vec![
"one".to_string(),
"two".to_string(),
"three".to_string(),
])
.build(),
),
order: RecordFieldOrder::Ascending,
position: 0,
custom_attributes: Default::default(),
},
RecordField {
name: "next".to_string(),
doc: None,
default: None,
aliases: None,
schema: Schema::Enum(EnumSchema {
name: Name {
name: "enum".to_owned(),
namespace: None,
},
aliases: None,
doc: None,
symbols: vec!["one".to_string(), "two".to_string(), "three".to_string()],
default: None,
attributes: Default::default(),
}),
order: RecordFieldOrder::Ascending,
position: 1,
custom_attributes: Default::default(),
},
],
lookup,
attributes: Default::default(),
});
assert_eq!(schema, expected);
let canonical_form = &schema.canonical_form();
let expected = r#"{"name":"record","type":"record","fields":[{"name":"enum","type":{"name":"enum","type":"enum","symbols":["one","two","three"]}},{"name":"next","type":"enum"}]}"#;
assert_eq!(canonical_form, &expected);
Ok(())
}