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

mgrigorov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/avro-rs.git


The following commit(s) were added to refs/heads/main by this push:
     new 4411f75  Minor enhancement to `parse_str_with_list` (#105)
4411f75 is described below

commit 4411f750ce8bf2563c8d93fc574cfcf9593220dd
Author: Robert Yokota <[email protected]>
AuthorDate: Sat Jan 18 10:46:16 2025 -0800

    Minor enhancement to `parse_str_with_list` (#105)
---
 avro/src/schema.rs | 51 ++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 48 insertions(+), 3 deletions(-)

diff --git a/avro/src/schema.rs b/avro/src/schema.rs
index 1757e98..93dbe18 100644
--- a/avro/src/schema.rs
+++ b/avro/src/schema.rs
@@ -1108,7 +1108,10 @@ impl Schema {
     /// # Arguments
     /// * `schema` - the JSON string of the schema to parse
     /// * `schemata` - a slice of additional schemas that is used to resolve 
cross-references
-    pub fn parse_str_with_list(schema: &str, schemata: &[&str]) -> 
AvroResult<Schema> {
+    pub fn parse_str_with_list(
+        schema: &str,
+        schemata: &[&str],
+    ) -> AvroResult<(Schema, Vec<Schema>)> {
         let mut input_schemas: HashMap<Name, Value> = 
HashMap::with_capacity(schemata.len());
         let mut input_order: Vec<Name> = Vec::with_capacity(schemata.len());
         for json in schemata {
@@ -1132,7 +1135,9 @@ impl Schema {
         parser.parse_input_schemas()?;
 
         let value = 
serde_json::from_str(schema).map_err(Error::ParseSchemaJson)?;
-        parser.parse(&value, &None)
+        let schema = parser.parse(&value, &None)?;
+        let schemata = parser.parse_list()?;
+        Ok((schema, schemata))
     }
 
     /// Create a `Schema` from a reader which implements [`Read`].
@@ -2761,7 +2766,44 @@ mod tests {
 
         let schema_str_c = r#"["A", "B"]"#;
 
-        let schema_c = Schema::parse_str_with_list(schema_str_c, 
&[schema_str_a, schema_str_b])?;
+        let (schema_c, schemata) =
+            Schema::parse_str_with_list(schema_str_c, &[schema_str_a, 
schema_str_b])?;
+
+        let schema_a_expected = Schema::Record(RecordSchema {
+            name: Name::new("A")?,
+            aliases: None,
+            doc: None,
+            fields: vec![RecordField {
+                name: "field_one".to_string(),
+                doc: None,
+                default: None,
+                aliases: None,
+                schema: Schema::Float,
+                order: RecordFieldOrder::Ignore,
+                position: 0,
+                custom_attributes: Default::default(),
+            }],
+            lookup: BTreeMap::from_iter(vec![("field_one".to_string(), 0)]),
+            attributes: Default::default(),
+        });
+
+        let schema_b_expected = Schema::Record(RecordSchema {
+            name: Name::new("B")?,
+            aliases: None,
+            doc: None,
+            fields: vec![RecordField {
+                name: "field_one".to_string(),
+                doc: None,
+                default: None,
+                aliases: None,
+                schema: Schema::Float,
+                order: RecordFieldOrder::Ignore,
+                position: 0,
+                custom_attributes: Default::default(),
+            }],
+            lookup: BTreeMap::from_iter(vec![("field_one".to_string(), 0)]),
+            attributes: Default::default(),
+        });
 
         let schema_c_expected = Schema::Union(UnionSchema::new(vec![
             Schema::Ref {
@@ -2773,6 +2815,9 @@ mod tests {
         ])?);
 
         assert_eq!(schema_c, schema_c_expected);
+        assert_eq!(schemata[0], schema_a_expected);
+        assert_eq!(schemata[1], schema_b_expected);
+
         Ok(())
     }
 

Reply via email to