in avro/src/types.rs [2873:2944]
fn avro_3688_schema_resolution_panic(set_field_b: bool) -> TestResult {
use crate::ser::Serializer;
use serde::{Deserialize, Serialize};
let schema_str = r#"{
"type": "record",
"name": "Message",
"fields": [
{
"name": "field_a",
"type": [
"null",
{
"name": "Inner",
"type": "record",
"fields": [
{
"name": "inner_a",
"type": "string"
}
]
}
],
"default": null
},
{
"name": "field_b",
"type": [
"null",
"Inner"
],
"default": null
}
]
}"#;
#[derive(Serialize, Deserialize)]
struct Inner {
inner_a: String,
}
#[derive(Serialize, Deserialize)]
struct Message {
field_a: Option<Inner>,
field_b: Option<Inner>,
}
let schema = Schema::parse_str(schema_str)?;
let msg = Message {
field_a: Some(Inner {
inner_a: "foo".to_string(),
}),
field_b: if set_field_b {
Some(Inner {
inner_a: "bar".to_string(),
})
} else {
None
},
};
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(())
}