Skip to content

Commit 1cb237d

Browse files
committed
Issue #225 - Compare the deserialized result with the serialized one
Signed-off-by: Martin Tzvetanov Grigorov <[email protected]>
1 parent 6764f50 commit 1cb237d

File tree

1 file changed

+63
-47
lines changed

1 file changed

+63
-47
lines changed

avro/tests/avro-rs-226.rs

Lines changed: 63 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,105 @@
1-
use apache_avro::{AvroSchema, Writer};
1+
use apache_avro::{AvroSchema, Schema, Writer, from_value};
22
use apache_avro_test_helper::TestResult;
3-
use serde::Serialize;
3+
use serde::{Deserialize, Serialize, de::DeserializeOwned};
4+
use std::fmt::Debug;
5+
6+
fn ser_deser<T>(schema: &Schema, record: T) -> TestResult
7+
where
8+
T: Serialize + DeserializeOwned + Debug + PartialEq + Clone,
9+
{
10+
let record2 = record.clone();
11+
let mut writer = Writer::new(schema, vec![]);
12+
writer.append_ser(record)?;
13+
let bytes_written = writer.into_inner()?;
14+
15+
let reader = apache_avro::Reader::new(&bytes_written[..])?;
16+
for value in reader {
17+
let value = value?;
18+
let deserialized = from_value::<T>(&value)?;
19+
assert_eq!(deserialized, record2);
20+
}
21+
22+
Ok(())
23+
}
424

525
#[test]
6-
fn avro_rs_225_index_out_of_bounds_with_serde_skip_serializing_skip_middle_field() -> TestResult {
7-
#[derive(Serialize, AvroSchema)]
26+
fn avro_rs_226_index_out_of_bounds_with_serde_skip_serializing_skip_middle_field() -> TestResult {
27+
#[derive(AvroSchema, Clone, Debug, Deserialize, PartialEq, Serialize)]
828
struct T {
929
x: Option<i8>,
1030
#[serde(skip_serializing_if = "Option::is_none")]
1131
y: Option<String>,
1232
z: Option<i8>,
1333
}
1434

15-
let schema = T::get_schema();
16-
let mut writer = Writer::new(&schema, vec![]);
17-
writer.append_ser(T {
18-
x: None,
19-
y: None,
20-
z: Some(1),
21-
})?;
22-
writer.into_inner()?;
23-
Ok(())
35+
ser_deser::<T>(
36+
&T::get_schema(),
37+
T {
38+
x: None,
39+
y: None,
40+
z: Some(1),
41+
},
42+
)
2443
}
2544

2645
#[test]
27-
fn avro_rs_225_index_out_of_bounds_with_serde_skip_serializing_skip_first_field() -> TestResult {
28-
#[derive(Serialize, AvroSchema)]
46+
fn avro_rs_226_index_out_of_bounds_with_serde_skip_serializing_skip_first_field() -> TestResult {
47+
#[derive(AvroSchema, Clone, Debug, Deserialize, PartialEq, Serialize)]
2948
struct T {
3049
#[serde(skip_serializing_if = "Option::is_none")]
3150
x: Option<i8>,
3251
y: Option<String>,
3352
z: Option<i8>,
3453
}
3554

36-
let schema = T::get_schema();
37-
let mut writer = Writer::new(&schema, vec![]);
38-
writer.append_ser(T {
39-
x: None,
40-
y: None,
41-
z: Some(1),
42-
})?;
43-
writer.into_inner()?;
44-
Ok(())
55+
ser_deser::<T>(
56+
&T::get_schema(),
57+
T {
58+
x: None,
59+
y: None,
60+
z: Some(1),
61+
},
62+
)
4563
}
4664

4765
#[test]
48-
fn avro_rs_225_index_out_of_bounds_with_serde_skip_serializing_skip_last_field() -> TestResult {
49-
#[derive(Serialize, AvroSchema)]
66+
fn avro_rs_226_index_out_of_bounds_with_serde_skip_serializing_skip_last_field() -> TestResult {
67+
#[derive(AvroSchema, Clone, Debug, Deserialize, PartialEq, Serialize)]
5068
struct T {
5169
x: Option<i8>,
5270
y: Option<String>,
5371
#[serde(skip_serializing_if = "Option::is_none")]
5472
z: Option<i8>,
5573
}
5674

57-
let schema = T::get_schema();
58-
let mut writer = Writer::new(&schema, vec![]);
59-
writer.append_ser(T {
60-
x: Some(0),
61-
y: None,
62-
z: None,
63-
})?;
64-
writer.into_inner()?;
65-
Ok(())
75+
ser_deser::<T>(
76+
&T::get_schema(),
77+
T {
78+
x: Some(0),
79+
y: None,
80+
z: None,
81+
},
82+
)
6683
}
6784

6885
#[test]
69-
fn avro_rs_225_index_out_of_bounds_with_serde_skip_serializing_skip_multiple_fields() -> TestResult
86+
fn avro_rs_226_index_out_of_bounds_with_serde_skip_serializing_skip_multiple_fields() -> TestResult
7087
{
71-
#[derive(Serialize, AvroSchema)]
88+
#[derive(AvroSchema, Clone, Debug, Deserialize, PartialEq, Serialize)]
7289
struct T {
7390
x: Option<i8>,
74-
#[serde(skip_serializing_if = "Option::is_none")]
91+
#[serde(skip_serializing_if = "Option::is_none", skip)]
7592
y: Option<String>,
7693
#[serde(skip_serializing_if = "Option::is_none")]
7794
z: Option<i8>,
7895
}
7996

80-
let schema = T::get_schema();
81-
let mut writer = Writer::new(&schema, vec![]);
82-
writer.append_ser(T {
83-
x: Some(0),
84-
y: None,
85-
z: None,
86-
})?;
87-
writer.into_inner()?;
88-
Ok(())
97+
ser_deser::<T>(
98+
&T::get_schema(),
99+
T {
100+
x: Some(0),
101+
y: None,
102+
z: None,
103+
},
104+
)
89105
}

0 commit comments

Comments
 (0)