Skip to content

Commit deed225

Browse files
committed
test: Different field order between Serde and the Schema
1 parent 98d6caf commit deed225

1 file changed

Lines changed: 47 additions & 4 deletions

File tree

avro/src/ser_schema.rs

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1740,13 +1740,11 @@ impl<'a, 's, W: Write> ser::Serializer for &'a mut SchemaAwareWriteSerializer<'s
17401740
#[cfg(test)]
17411741
mod tests {
17421742
use super::*;
1743-
use crate::{
1744-
Days, Duration, Millis, Months, decimal::Decimal, error::Details, schema::ResolvedSchema,
1745-
};
1743+
use crate::{Days, Duration, Millis, Months, decimal::Decimal, error::Details, schema::ResolvedSchema, Writer, Reader, from_value};
17461744
use apache_avro_test_helper::TestResult;
17471745
use bigdecimal::BigDecimal;
17481746
use num_bigint::{BigInt, Sign};
1749-
use serde::Serialize;
1747+
use serde::{Deserialize, Serialize};
17501748
use serde_bytes::{ByteArray, Bytes};
17511749
use std::{
17521750
collections::{BTreeMap, HashMap},
@@ -2900,4 +2898,49 @@ mod tests {
29002898
string_record.serialize(&mut serializer)?;
29012899
Ok(())
29022900
}
2901+
2902+
2903+
#[test]
2904+
fn different_field_order_serde_vs_schema() -> TestResult {
2905+
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2906+
struct Foo {
2907+
a: String,
2908+
b: String,
2909+
}
2910+
let schema = Schema::parse_str(
2911+
r#"
2912+
{
2913+
"type":"record",
2914+
"name":"Foo",
2915+
"fields": [
2916+
{
2917+
"name":"b",
2918+
"type":"string"
2919+
},
2920+
{
2921+
"name":"a",
2922+
"type":"string"
2923+
}
2924+
]
2925+
}
2926+
"#,
2927+
)?;
2928+
2929+
2930+
let mut writer = Writer::new(&schema, Vec::new())?;
2931+
if let Err(e) = writer.append_ser(Foo {
2932+
a: "Hello".into(),
2933+
b: "World".into(),
2934+
}) {
2935+
panic!("{e:?}");
2936+
}
2937+
let encoded = writer.into_inner()?;
2938+
let mut reader = Reader::with_schema(&schema, &encoded[..])?;
2939+
let decoded = from_value::<Foo>(&reader.next().unwrap()?)?;
2940+
assert_eq!(decoded, Foo {
2941+
a: "Hello".into(),
2942+
b: "World".into(),
2943+
});
2944+
Ok(())
2945+
}
29032946
}

0 commit comments

Comments
 (0)