in avro/src/reader.rs [211:236]
fn read_writer_schema(&mut self, metadata: &HashMap<String, Value>) -> AvroResult<()> {
let json: serde_json::Value = metadata
.get("avro.schema")
.and_then(|bytes| {
if let Value::Bytes(ref bytes) = *bytes {
from_slice(bytes.as_ref()).ok()
} else {
None
}
})
.ok_or(Error::GetAvroSchemaFromMap)?;
if !self.schemata.is_empty() {
let rs = ResolvedSchema::try_from(self.schemata.clone())?;
let names: Names = rs
.get_names()
.iter()
.map(|(name, schema)| (name.clone(), (*schema).clone()))
.collect();
self.writer_schema = Schema::parse_with_names(&json, names)?;
resolve_names_with_schemata(&self.schemata, &mut self.names_refs, &None)?;
} else {
self.writer_schema = Schema::parse(&json)?;
resolve_names(&self.writer_schema, &mut self.names_refs, &None)?;
}
Ok(())
}