in avro/src/ser_schema.rs [2568:2619]
fn test_serialize_timestamp() -> TestResult {
for precision in ["millis", "micros", "nanos"] {
let schema = Schema::parse_str(&format!(
r#"{{
"type": "long",
"logicalType": "timestamp-{precision}"
}}"#
))?;
let mut buffer: Vec<u8> = Vec::new();
let names = HashMap::new();
let mut serializer =
SchemaAwareWriteSerializer::new(&mut buffer, &schema, &names, None);
100_u8.serialize(&mut serializer)?;
1000_u16.serialize(&mut serializer)?;
10000_u32.serialize(&mut serializer)?;
1000_i16.serialize(&mut serializer)?;
10000_i32.serialize(&mut serializer)?;
10000_i64.serialize(&mut serializer)?;
match 10000_f64.serialize(&mut serializer) {
Err(Error::SerializeValueWithSchema {
value_type,
value,
schema,
}) => {
let mut capital_precision = precision.to_string();
if let Some(c) = capital_precision.chars().next() {
capital_precision.replace_range(..1, &c.to_uppercase().to_string());
}
assert_eq!(value_type, "f64");
assert_eq!(
value,
format!(
"10000. Cause: Expected: Timestamp{}. Got: Double",
capital_precision
)
);
assert_eq!(schema, schema);
}
unexpected => panic!("Expected an error. Got: {unexpected:?}"),
}
assert_eq!(
buffer.as_slice(),
&[200, 1, 208, 15, 160, 156, 1, 208, 15, 160, 156, 1, 160, 156, 1]
);
}
Ok(())
}