@@ -1740,13 +1740,11 @@ impl<'a, 's, W: Write> ser::Serializer for &'a mut SchemaAwareWriteSerializer<'s
17401740#[ cfg( test) ]
17411741mod 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