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

mgrigorov pushed a commit to branch avro-3814/schema-resolution-union
in repository https://gitbox.apache.org/repos/asf/avro.git

commit 088459db4635f0dd2ad7ea8f8c49627a8c7880c8
Author: Martin Tzvetanov Grigorov <[email protected]>
AuthorDate: Tue Aug 15 10:08:34 2023 +0300

    AVRO-3814: [Rust] Use types::Value::resolve_internal() instead of 
validate_internal()
    
    ... when looking for the matching schema in an union
    
    Signed-off-by: Martin Tzvetanov Grigorov <[email protected]>
---
 lang/rust/avro/src/schema.rs      |  5 +++--
 lang/rust/avro/src/types.rs       |  2 +-
 lang/rust/avro/tests/avro-3786.rs | 20 ++++++++++----------
 3 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/lang/rust/avro/src/schema.rs b/lang/rust/avro/src/schema.rs
index 22307d4e4..0c3ce3351 100644
--- a/lang/rust/avro/src/schema.rs
+++ b/lang/rust/avro/src/schema.rs
@@ -840,8 +840,9 @@ impl UnionSchema {
 
                 // Attempt to validate the value in order to ensure we've 
selected the right schema.
                 value
-                    .validate_internal(schema, &collected_names, namespace, 
true)
-                    .is_none()
+                    .clone()
+                    .resolve_internal(schema, &collected_names, namespace, 
&None)
+                    .is_ok()
             })
         }
     }
diff --git a/lang/rust/avro/src/types.rs b/lang/rust/avro/src/types.rs
index 4ba6a77fe..2a812c3af 100644
--- a/lang/rust/avro/src/types.rs
+++ b/lang/rust/avro/src/types.rs
@@ -656,7 +656,7 @@ impl Value {
         self.resolve_internal(schema, rs.get_names(), &enclosing_namespace, 
&None)
     }
 
-    fn resolve_internal(
+    pub(crate) fn resolve_internal(
         mut self,
         schema: &Schema,
         names: &NamesRef,
diff --git a/lang/rust/avro/tests/avro-3786.rs 
b/lang/rust/avro/tests/avro-3786.rs
index 437889ed7..d27e0c4e5 100644
--- a/lang/rust/avro/tests/avro-3786.rs
+++ b/lang/rust/avro/tests/avro-3786.rs
@@ -248,10 +248,10 @@ fn 
avro_3786_deserialize_union_with_different_enum_order_defined_in_record() ->
         ]
     }"#;
     let writer_schema = Schema::parse_str(writer_schema)?;
-    let foo = Foo {
+    let foo1 = Foo {
         bar_parent: Some(BarParent { bar: Bar::Bar0 }),
     };
-    let avro_value = crate::to_value(foo)?;
+    let avro_value = crate::to_value(foo1)?;
     assert!(
         avro_value.validate(&writer_schema),
         "value is valid for schema",
@@ -361,10 +361,10 @@ fn 
test_avro_3786_deserialize_union_with_different_enum_order_defined_in_record_
             ]
         }"#;
     let writer_schema = Schema::parse_str(writer_schema)?;
-    let foo = Foo {
+    let foo1 = Foo {
         bar_parent: Some(BarParent { bar: Bar::Bar1 }),
     };
-    let avro_value = crate::to_value(foo)?;
+    let avro_value = crate::to_value(foo1)?;
     assert!(
         avro_value.validate(&writer_schema),
         "value is valid for schema",
@@ -474,10 +474,10 @@ fn 
test_avro_3786_deserialize_union_with_different_enum_order_defined_in_record_
             ]
         }"#;
     let writer_schema = Schema::parse_str(writer_schema)?;
-    let foo = Foo {
+    let foo1 = Foo {
         bar_parent: Some(BarParent { bar: Bar::Bar1 }),
     };
-    let avro_value = crate::to_value(foo)?;
+    let avro_value = crate::to_value(foo1)?;
     assert!(
         avro_value.validate(&writer_schema),
         "value is valid for schema",
@@ -587,10 +587,10 @@ fn 
deserialize_union_with_different_enum_order_defined_in_record() -> TestResult
             ]
         }"#;
     let writer_schema = Schema::parse_str(writer_schema)?;
-    let foo = Foo {
+    let foo1 = Foo {
         bar_parent: Some(BarParent { bar: Bar::Bar2 }),
     };
-    let avro_value = crate::to_value(foo)?;
+    let avro_value = crate::to_value(foo1)?;
     assert!(
         avro_value.validate(&writer_schema),
         "value is valid for schema",
@@ -853,7 +853,7 @@ fn 
deserialize_union_with_record_with_enum_defined_inline_reader_has_different_i
             ]
         }"#;
     let writer_schema = Schema::parse_str(writer_schema)?;
-    let foo = Foo {
+    let foo1 = Foo {
         bar_init: Bar::Bar0,
         baz: Baz::Baz0,
         parent: Some(Parent {
@@ -864,7 +864,7 @@ fn 
deserialize_union_with_record_with_enum_defined_inline_reader_has_different_i
             defined_in_record: DefinedInRecord::Val1,
         }),
     };
-    let avro_value = crate::to_value(foo)?;
+    let avro_value = crate::to_value(foo1)?;
     assert!(
         avro_value.validate(&writer_schema),
         "value is valid for schema",

Reply via email to