Skip to content

Commit c999938

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 0102043 commit c999938

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

lang/rust/avro/src/de.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,8 @@ mod tests {
668668
use serde::{Deserialize, Serialize};
669669
use serial_test::serial;
670670
use std::sync::atomic::Ordering;
671+
use serde::Serialize;
672+
use serde_bytes::ByteArray;
671673
use uuid::Uuid;
672674

673675
use apache_avro_test_helper::TestResult;
@@ -1554,14 +1556,13 @@ mod tests {
15541556
fn test_avro_3631_struct_fixed_field() {
15551557
#[derive(Debug, Serialize, Deserialize)]
15561558
struct TestStructFixedField {
1557-
field: [u8; 6],
1559+
field: ByteArray<6>,
15581560
}
15591561

15601562
let value = Value::Record(vec![(
15611563
"field".to_string(),
15621564
Value::Fixed(6, vec![0, 0, 0, 0, 0, 0]),
15631565
)]);
15641566
let _deserialized: TestStructFixedField = from_value(&value).unwrap();
1565-
15661567
}
15671568
}

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> {
@@ -494,6 +494,7 @@ mod tests {
494494
use serde::{Deserialize, Serialize};
495495
use serial_test::serial;
496496
use std::sync::atomic::Ordering;
497+
use serde_bytes::ByteArray;
497498

498499
#[derive(Debug, Deserialize, Serialize, Clone)]
499500
struct Test {
@@ -686,7 +687,7 @@ mod tests {
686687

687688
#[derive(Debug, Serialize, Deserialize)]
688689
struct TestStructFixedField {
689-
field: [u8; 6],
690+
field: ByteArray<6>,
690691
}
691692

692693
#[test]
@@ -1046,15 +1047,17 @@ mod tests {
10461047
}
10471048

10481049
#[test]
1049-
fn test_to_value_fixed_field_avro_3631() {
1050-
let test = TestStructFixedField { field: [1; 6] };
1050+
fn avro_3631_test_to_value_fixed_field() {
1051+
let test = TestStructFixedField {
1052+
field: ByteArray::new([1; 6]),
1053+
};
10511054
let expected = Value::Record(vec![(
10521055
"field".to_owned(),
1053-
Value::Fixed(6, Vec::from(test.field.clone())),
1056+
Value::Fixed(6, Vec::from(test.field.clone().into_array())),
10541057
)]);
10551058
assert_eq!(
1056-
to_value(test).unwrap(),
10571059
expected,
1060+
to_value(test).unwrap(),
10581061
"error serializing fixed array"
10591062
);
10601063
}

lang/rust/avro/src/types.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,6 +1163,7 @@ mod tests {
11631163
use pretty_assertions::assert_eq;
11641164
use serde::{Deserialize, Serialize};
11651165
use serde_json::json;
1166+
use serde_bytes::ByteArray;
11661167
use uuid::Uuid;
11671168

11681169
#[test]
@@ -3114,14 +3115,16 @@ Field with name '"b"' is not a member of the map items"#,
31143115
);
31153116
}
31163117

3117-
#[derive(Debug, Serialize, Deserialize)]
3118-
struct TestStructFixedField {
3119-
field: [u8; 6],
3120-
}
3121-
31223118
#[test]
3123-
fn test_avro_3631_serialize_fixed_fields() {
3124-
let test = TestStructFixedField { field: [1; 6] };
3119+
fn avro_3631_test_serialize_fixed_fields() {
3120+
#[derive(Debug, Serialize, Deserialize)]
3121+
struct TestStructFixedField {
3122+
field: ByteArray<6>,
3123+
}
3124+
3125+
let test = TestStructFixedField {
3126+
field: ByteArray::new([1; 6]),
3127+
};
31253128
let value: Value = to_value(test).unwrap();
31263129
let schema = Schema::parse_str(
31273130
r#"

0 commit comments

Comments
 (0)