You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by mg...@apache.org on 2022/10/20 09:03:50 UTC

[avro] branch avro-3646-serde-for-enum-mixed-variants updated (df6d62868 -> 8bcf5c4f6)

This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a change to branch avro-3646-serde-for-enum-mixed-variants
in repository https://gitbox.apache.org/repos/asf/avro.git


    from df6d62868 AVRO-3646: Add a unit test for serializing Enum with different kind of variants
     new 243696c37 AVRO-3646: Add unit tests for deserializing Value to Enum with different variants
     new 8bcf5c4f6 AVRO-3646: Simplify the serialization tests

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 lang/rust/avro/src/de.rs  | 89 +++++++++++++++++++++++++++++++--------------
 lang/rust/avro/src/ser.rs | 91 ++++++++++++++++++++++-------------------------
 2 files changed, 104 insertions(+), 76 deletions(-)


[avro] 02/02: AVRO-3646: Simplify the serialization tests

Posted by mg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch avro-3646-serde-for-enum-mixed-variants
in repository https://gitbox.apache.org/repos/asf/avro.git

commit 8bcf5c4f68de02857eed3d2dcbb936bd32a8a1ba
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Thu Oct 20 12:03:23 2022 +0300

    AVRO-3646: Simplify the serialization tests
    
    Signed-off-by: Martin Tzvetanov Grigorov <mg...@apache.org>
---
 lang/rust/avro/src/ser.rs | 104 +++++++++++++++++-----------------------------
 1 file changed, 39 insertions(+), 65 deletions(-)

diff --git a/lang/rust/avro/src/ser.rs b/lang/rust/avro/src/ser.rs
index 7f3a551f1..e7b1da597 100644
--- a/lang/rust/avro/src/ser.rs
+++ b/lang/rust/avro/src/ser.rs
@@ -1002,83 +1002,57 @@ mod tests {
     #[test]
     fn avro_3646_test_to_value_enum() {
         #[derive(Debug, Deserialize, Serialize, PartialEq, Eq)]
-        struct TestNullExternalEnum2 {
-            a: NullExternalEnum2,
+        struct TestNullExternalEnum {
+            a: NullExternalEnum,
         }
 
         #[derive(Debug, Deserialize, Serialize, PartialEq, Eq)]
-        enum NullExternalEnum2 {
+        enum NullExternalEnum {
             Val1,
             Val2(),
             Val3(()),
             Val4(u64),
         }
 
-        let test_val1 = TestNullExternalEnum2 {
-            a: NullExternalEnum2::Val1,
-        };
-
-        let expected_val1 =
-            Value::Record(vec![("a".to_owned(), Value::Enum(0, "Val1".to_owned()))]);
-
-        let actual_val1 = to_value(test_val1).unwrap();
-        assert_eq!(
-            actual_val1, expected_val1,
-            "error serializing null external enum, val1"
-        );
-
-        let test_val2 = TestNullExternalEnum2 {
-            a: NullExternalEnum2::Val2(),
-        };
-
-        let expected_val2 = Value::Record(vec![(
-            "a".to_owned(),
-            Value::Record(vec![
-                ("type".to_owned(), Value::Enum(1, "Val2".to_owned())),
-                ("value".to_owned(), Value::Array(vec![])),
-            ]),
-        )]);
-
-        let actual_val2 = to_value(test_val2).unwrap();
-        assert_eq!(
-            actual_val2, expected_val2,
-            "error serializing null external enum, val2"
-        );
-
-        let test_val3 = TestNullExternalEnum2 {
-            a: NullExternalEnum2::Val3(()),
-        };
-
-        let expected_val3 = Value::Record(vec![(
-            "a".to_owned(),
-            Value::Record(vec![
-                ("type".to_owned(), Value::Enum(2, "Val3".to_owned())),
-                ("value".to_owned(), Value::Union(2, Value::Null.into())),
-            ]),
-        )]);
+        let data = vec![
+            (TestNullExternalEnum {
+                a: NullExternalEnum::Val1,
+            }, Value::Record(vec![("a".to_owned(), Value::Enum(0, "Val1".to_owned()))])),
 
-        let actual_val3 = to_value(test_val3).unwrap();
-        assert_eq!(
-            actual_val3, expected_val3,
-            "error serializing null external enum, val3"
-        );
+            (TestNullExternalEnum {
+                a: NullExternalEnum::Val2(),
+            }, Value::Record(vec![(
+                "a".to_owned(),
+                Value::Record(vec![
+                    ("type".to_owned(), Value::Enum(1, "Val2".to_owned())),
+                    ("value".to_owned(), Value::Array(vec![])),
+                ]),
+            )])),
 
-        let test_val4 = TestNullExternalEnum2 {
-            a: NullExternalEnum2::Val4(123),
-        };
+            (TestNullExternalEnum {
+                a: NullExternalEnum::Val3(()),
+            }, Value::Record(vec![(
+                "a".to_owned(),
+                Value::Record(vec![
+                    ("type".to_owned(), Value::Enum(2, "Val3".to_owned())),
+                    ("value".to_owned(), Value::Union(2, Value::Null.into())),
+                ]),
+            )])),
 
-        let expected_val4 = Value::Record(vec![(
-            "a".to_owned(),
-            Value::Record(vec![
-                ("type".to_owned(), Value::Enum(3, "Val4".to_owned())),
-                ("value".to_owned(), Value::Union(3, Value::Long(123).into())),
-            ]),
-        )]);
+            (TestNullExternalEnum {
+                a: NullExternalEnum::Val4(123),
+            }, Value::Record(vec![(
+                "a".to_owned(),
+                Value::Record(vec![
+                    ("type".to_owned(), Value::Enum(3, "Val4".to_owned())),
+                    ("value".to_owned(), Value::Union(3, Value::Long(123).into())),
+                ]),
+            )]))
+        ];
 
-        let actual_val4 = to_value(test_val4).unwrap();
-        assert_eq!(
-            actual_val4, expected_val4,
-            "error serializing null external enum, val4"
-        );
+        for (test, expected) in &data {
+            let actual = to_value(test).unwrap();
+            assert_eq!(actual, *expected,);
+        }
     }
 }


[avro] 01/02: AVRO-3646: Add unit tests for deserializing Value to Enum with different variants

Posted by mg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

mgrigorov pushed a commit to branch avro-3646-serde-for-enum-mixed-variants
in repository https://gitbox.apache.org/repos/asf/avro.git

commit 243696c37bcc4a5575af8bb84e7924c12ca03e59
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Thu Oct 20 11:57:38 2022 +0300

    AVRO-3646: Add unit tests for deserializing Value to Enum with different variants
    
    Signed-off-by: Martin Tzvetanov Grigorov <mg...@apache.org>
---
 lang/rust/avro/src/de.rs  | 89 +++++++++++++++++++++++++++++++++--------------
 lang/rust/avro/src/ser.rs | 27 +++++++++++---
 2 files changed, 85 insertions(+), 31 deletions(-)

diff --git a/lang/rust/avro/src/de.rs b/lang/rust/avro/src/de.rs
index 1d3b50360..db948b855 100644
--- a/lang/rust/avro/src/de.rs
+++ b/lang/rust/avro/src/de.rs
@@ -662,17 +662,6 @@ mod tests {
         Val2,
     }
 
-    #[derive(Debug, Deserialize, Serialize, PartialEq, Eq)]
-    struct TestNullExternalEnum {
-        a: NullExternalEnum,
-    }
-
-    #[derive(Debug, Deserialize, Serialize, PartialEq, Eq)]
-    enum NullExternalEnum {
-        Val1(()),
-        Val2(u64),
-    }
-
     #[derive(Debug, Serialize, Deserialize, PartialEq)]
     struct TestSingleValueExternalEnum {
         a: SingleValueExternalEnum,
@@ -786,23 +775,69 @@ mod tests {
     }
 
     #[test]
-    fn test_from_value_null_enum() {
-        let expected = TestNullExternalEnum {
-            a: NullExternalEnum::Val1(()),
-        };
+    fn avro_3645_3646_test_from_value_enum() {
+        #[derive(Debug, Deserialize, Serialize, PartialEq, Eq)]
+        struct TestNullExternalEnum {
+            a: NullExternalEnum,
+        }
 
-        let test = Value::Record(vec![(
-            "a".to_owned(),
-            Value::Record(vec![
-                ("type".to_owned(), Value::String("Val1".to_owned())),
-                ("value".to_owned(), Value::Union(0, Box::new(Value::Null))),
-            ]),
-        )]);
-        let final_value: TestNullExternalEnum = from_value(&test).unwrap();
-        assert_eq!(
-            final_value, expected,
-            "Error deserializing null external enum"
-        );
+        #[derive(Debug, Deserialize, Serialize, PartialEq, Eq)]
+        enum NullExternalEnum {
+            Val1,
+            Val2(),
+            Val3(()),
+            Val4(u64),
+        }
+
+        let data = vec![
+            (
+                TestNullExternalEnum {
+                    a: NullExternalEnum::Val1,
+                },
+                Value::Record(vec![("a".to_owned(), Value::Enum(0, "Val1".to_owned()))]),
+            ),
+            (
+                TestNullExternalEnum {
+                    a: NullExternalEnum::Val2(),
+                },
+                Value::Record(vec![(
+                    "a".to_owned(),
+                    Value::Record(vec![
+                        ("type".to_owned(), Value::Enum(1, "Val2".to_owned())),
+                        ("value".to_owned(), Value::Array(vec![])),
+                    ]),
+                )]),
+            ),
+            (
+                TestNullExternalEnum {
+                    a: NullExternalEnum::Val3(()),
+                },
+                Value::Record(vec![(
+                    "a".to_owned(),
+                    Value::Record(vec![
+                        ("type".to_owned(), Value::Enum(2, "Val3".to_owned())),
+                        ("value".to_owned(), Value::Union(2, Box::new(Value::Null))),
+                    ]),
+                )]),
+            ),
+            (
+                TestNullExternalEnum {
+                    a: NullExternalEnum::Val4(123),
+                },
+                Value::Record(vec![(
+                    "a".to_owned(),
+                    Value::Record(vec![
+                        ("type".to_owned(), Value::Enum(3, "Val4".to_owned())),
+                        ("value".to_owned(), Value::Union(3, Value::Long(123).into())),
+                    ]),
+                )]),
+            ),
+        ];
+
+        for (expected, test) in data.iter() {
+            let actual: TestNullExternalEnum = from_value(test).unwrap();
+            assert_eq!(actual, *expected);
+        }
     }
 
     #[test]
diff --git a/lang/rust/avro/src/ser.rs b/lang/rust/avro/src/ser.rs
index 16f56d703..7f3a551f1 100644
--- a/lang/rust/avro/src/ser.rs
+++ b/lang/rust/avro/src/ser.rs
@@ -1000,7 +1000,7 @@ mod tests {
     }
 
     #[test]
-    fn avro_3646_test_to_value_null_enum() {
+    fn avro_3646_test_to_value_enum() {
         #[derive(Debug, Deserialize, Serialize, PartialEq, Eq)]
         struct TestNullExternalEnum2 {
             a: NullExternalEnum2,
@@ -1010,7 +1010,8 @@ mod tests {
         enum NullExternalEnum2 {
             Val1,
             Val2(),
-            Val3(u64),
+            Val3(()),
+            Val4(u64),
         }
 
         let test_val1 = TestNullExternalEnum2 {
@@ -1045,14 +1046,14 @@ mod tests {
         );
 
         let test_val3 = TestNullExternalEnum2 {
-            a: NullExternalEnum2::Val3(123),
+            a: NullExternalEnum2::Val3(()),
         };
 
         let expected_val3 = Value::Record(vec![(
             "a".to_owned(),
             Value::Record(vec![
                 ("type".to_owned(), Value::Enum(2, "Val3".to_owned())),
-                ("value".to_owned(), Value::Union(2, Value::Long(123).into())),
+                ("value".to_owned(), Value::Union(2, Value::Null.into())),
             ]),
         )]);
 
@@ -1061,5 +1062,23 @@ mod tests {
             actual_val3, expected_val3,
             "error serializing null external enum, val3"
         );
+
+        let test_val4 = TestNullExternalEnum2 {
+            a: NullExternalEnum2::Val4(123),
+        };
+
+        let expected_val4 = Value::Record(vec![(
+            "a".to_owned(),
+            Value::Record(vec![
+                ("type".to_owned(), Value::Enum(3, "Val4".to_owned())),
+                ("value".to_owned(), Value::Union(3, Value::Long(123).into())),
+            ]),
+        )]);
+
+        let actual_val4 = to_value(test_val4).unwrap();
+        assert_eq!(
+            actual_val4, expected_val4,
+            "error serializing null external enum, val4"
+        );
     }
 }