in avro/src/schema.rs [1275:1308]
fn denormalize(&mut self, schemata: &Vec<Schema>) -> AvroResult<()> {
match self {
Schema::Ref { name } => {
let replacement_schema = schemata
.iter()
.find(|s| s.name().map(|n| *n == *name).unwrap_or(false));
if let Some(schema) = replacement_schema {
let mut denorm = schema.clone();
denorm.denormalize(schemata)?;
*self = denorm;
} else {
return Err(Error::SchemaResolutionError(name.clone()));
}
}
Schema::Record(record_schema) => {
for field in &mut record_schema.fields {
field.schema.denormalize(schemata)?;
}
}
Schema::Array(array_schema) => {
array_schema.items.denormalize(schemata)?;
}
Schema::Map(map_schema) => {
map_schema.types.denormalize(schemata)?;
}
Schema::Union(union_schema) => {
for schema in &mut union_schema.schemas {
schema.denormalize(schemata)?;
}
}
_ => (),
}
Ok(())
}