Skip to content

Commit e9b7853

Browse files
committed
AVRO-3631: Add support for ser_de Value::Fixed
It is based on serde-rs/bytes#28 which is not yet merged. Signed-off-by: Martin Tzvetanov Grigorov <[email protected]>
1 parent d2008ef commit e9b7853

File tree

3 files changed

+23
-16
lines changed

3 files changed

+23
-16
lines changed

lang/rust/avro/src/de.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,7 @@ pub fn from_value<'de, D: Deserialize<'de>>(value: &'de Value) -> Result<D, Erro
647647
mod tests {
648648
use pretty_assertions::assert_eq;
649649
use serde::Serialize;
650+
use serde_bytes::ByteArray;
650651
use uuid::Uuid;
651652

652653
use super::*;
@@ -1222,16 +1223,16 @@ mod tests {
12221223
}
12231224

12241225
#[test]
1225-
fn test_struct_fixed_field_avro_3631() {
1226+
fn avro_3631_test_struct_fixed_field() {
12261227
#[derive(Debug, Serialize, Deserialize)]
12271228
struct TestStructFixedField {
1228-
field: [u8; 6],
1229+
field: ByteArray<6>,
12291230
}
12301231

12311232
let value = Value::Record(vec![(
12321233
"field".to_string(),
12331234
Value::Fixed(6, vec![0, 0, 0, 0, 0, 0]),
12341235
)]);
1235-
let _deserialized: TestStructFixedField = crate::from_value(&value).unwrap();
1236+
let _deserialized: TestStructFixedField = from_value(&value).unwrap();
12361237
}
12371238
}

lang/rust/avro/src/ser.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ impl<'b> ser::Serializer for &'b mut Serializer {
174174
}
175175

176176
fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> {
177-
Ok(Value::Bytes(v.to_owned()))
177+
Ok(Value::Fixed(v.len(), v.to_owned()))
178178
}
179179

180180
fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
@@ -487,6 +487,7 @@ mod tests {
487487
use super::*;
488488
use pretty_assertions::assert_eq;
489489
use serde::{Deserialize, Serialize};
490+
use serde_bytes::ByteArray;
490491

491492
#[derive(Debug, Deserialize, Serialize, Clone)]
492493
struct Test {
@@ -679,7 +680,7 @@ mod tests {
679680

680681
#[derive(Debug, Serialize, Deserialize)]
681682
struct TestStructFixedField {
682-
field: [u8; 6],
683+
field: ByteArray<6>,
683684
}
684685

685686
#[test]
@@ -1005,15 +1006,17 @@ mod tests {
10051006
}
10061007

10071008
#[test]
1008-
fn test_to_value_fixed_field_avro_3631() {
1009-
let test = TestStructFixedField { field: [1; 6] };
1009+
fn avro_3631_test_to_value_fixed_field() {
1010+
let test = TestStructFixedField {
1011+
field: ByteArray::new([1; 6]),
1012+
};
10101013
let expected = Value::Record(vec![(
10111014
"field".to_owned(),
1012-
Value::Fixed(6, Vec::from(test.field.clone())),
1015+
Value::Fixed(6, Vec::from(test.field.clone().into_array())),
10131016
)]);
10141017
assert_eq!(
1015-
to_value(test).unwrap(),
10161018
expected,
1019+
to_value(test).unwrap(),
10171020
"error serializing fixed array"
10181021
);
10191022
}

lang/rust/avro/src/types.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,7 @@ mod tests {
10201020
use apache_avro_test_helper::logger::{assert_logged, assert_not_logged};
10211021
use pretty_assertions::assert_eq;
10221022
use serde::{Deserialize, Serialize};
1023+
use serde_bytes::ByteArray;
10231024
use uuid::Uuid;
10241025

10251026
#[test]
@@ -2641,14 +2642,16 @@ Field with name '"b"' is not a member of the map items"#,
26412642
avro_3688_schema_resolution_panic(true);
26422643
}
26432644

2644-
#[derive(Debug, Serialize, Deserialize)]
2645-
struct TestStructFixedField {
2646-
field: [u8; 6],
2647-
}
2648-
26492645
#[test]
2650-
fn test_avro_3631_serialize_fixed_fields() {
2651-
let test = TestStructFixedField { field: [1; 6] };
2646+
fn avro_3631_test_serialize_fixed_fields() {
2647+
#[derive(Debug, Serialize, Deserialize)]
2648+
struct TestStructFixedField {
2649+
field: ByteArray<6>,
2650+
}
2651+
2652+
let test = TestStructFixedField {
2653+
field: ByteArray::new([1; 6]),
2654+
};
26522655
let value: Value = to_value(test).unwrap();
26532656
let schema = Schema::parse_str(
26542657
r#"

0 commit comments

Comments
 (0)