in avro/src/reader.rs [78:112]
fn read_header(&mut self) -> AvroResult<()> {
let mut buf = [0u8; 4];
self.reader
.read_exact(&mut buf)
.map_err(Error::ReadHeader)?;
if buf != [b'O', b'b', b'j', 1u8] {
return Err(Error::HeaderMagic);
}
let meta_schema = Schema::map(Schema::Bytes);
if let Value::Map(metadata) = decode(&meta_schema, &mut self.reader)? {
self.read_writer_schema(&metadata)?;
self.codec = read_codec(&metadata)?;
for (key, value) in metadata {
if key == "avro.schema"
|| key == "avro.codec"
|| key == "avro.codec.compression_level"
{
// already processed
} else if key.starts_with("avro.") {
warn!("Ignoring unknown metadata key: {}", key);
} else {
self.read_user_metadata(key, value);
}
}
} else {
return Err(Error::GetHeaderMetadata);
}
self.reader
.read_exact(&mut self.marker)
.map_err(Error::ReadMarker)
}