in avro/src/types.rs [2780:2861]
fn avro_3674_with_or_without_namespace(with_namespace: bool) -> TestResult {
use crate::ser::Serializer;
use serde::Serialize;
let schema_str = r#"
{
"type": "record",
"name": "NamespacedMessage",
[NAMESPACE]
"fields": [
{
"name": "field_a",
"type": {
"type": "record",
"name": "NestedMessage",
"fields": [
{
"name": "enum_a",
"type": {
"type": "enum",
"name": "EnumType",
"symbols": ["SYMBOL_1", "SYMBOL_2"],
"default": "SYMBOL_1"
}
},
{
"name": "enum_b",
"type": "EnumType"
}
]
}
}
]
}
"#;
let schema_str = schema_str.replace(
"[NAMESPACE]",
if with_namespace {
r#""namespace": "com.domain","#
} else {
""
},
);
let schema = Schema::parse_str(&schema_str)?;
#[derive(Serialize)]
enum EnumType {
#[serde(rename = "SYMBOL_1")]
Symbol1,
#[serde(rename = "SYMBOL_2")]
Symbol2,
}
#[derive(Serialize)]
struct FieldA {
enum_a: EnumType,
enum_b: EnumType,
}
#[derive(Serialize)]
struct NamespacedMessage {
field_a: FieldA,
}
let msg = NamespacedMessage {
field_a: FieldA {
enum_a: EnumType::Symbol2,
enum_b: EnumType::Symbol1,
},
};
let mut ser = Serializer::default();
let test_value: Value = msg.serialize(&mut ser)?;
assert!(test_value.validate(&schema), "test_value should validate");
assert!(
test_value.resolve(&schema).is_ok(),
"test_value should resolve"
);
Ok(())
}