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/03/22 08:48:31 UTC
[avro] branch branch-1.11 updated: [AVRO-3466] Serialize enum and fixed with namespace (#1617)
This is an automated email from the ASF dual-hosted git repository.
mgrigorov pushed a commit to branch branch-1.11
in repository https://gitbox.apache.org/repos/asf/avro.git
The following commit(s) were added to refs/heads/branch-1.11 by this push:
new 6f8dbfe [AVRO-3466] Serialize enum and fixed with namespace (#1617)
6f8dbfe is described below
commit 6f8dbfe595b5cd677f8607ae42b5eedb3b1e6efe
Author: Jack Klamer <jf...@gmail.com>
AuthorDate: Tue Mar 22 03:46:50 2022 -0500
[AVRO-3466] Serialize enum and fixed with namespace (#1617)
* [AVRO-3466] serialize with namespace
Co-authored-by: kvc-code <kc...@gmail.com>
* AVRO-3466: Small improvements to the test cases
Signed-off-by: Martin Tzvetanov Grigorov <mg...@apache.org>
Co-authored-by: kvc-code <kc...@gmail.com>
Co-authored-by: Martin Tzvetanov Grigorov <mg...@apache.org>
(cherry picked from commit 17e5a4554f65f5c3cd3300d3f87344c3474f6f2b)
---
lang/rust/avro/src/schema.rs | 90 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 90 insertions(+)
diff --git a/lang/rust/avro/src/schema.rs b/lang/rust/avro/src/schema.rs
index ed98118..4404745 100644
--- a/lang/rust/avro/src/schema.rs
+++ b/lang/rust/avro/src/schema.rs
@@ -1307,6 +1307,9 @@ impl Serialize for Schema {
} => {
let mut map = serializer.serialize_map(None)?;
map.serialize_entry("type", "enum")?;
+ if let Some(ref n) = name.namespace {
+ map.serialize_entry("namespace", n)?;
+ }
map.serialize_entry("name", &name.name)?;
map.serialize_entry("symbols", symbols)?;
map.end()
@@ -1319,6 +1322,9 @@ impl Serialize for Schema {
} => {
let mut map = serializer.serialize_map(None)?;
map.serialize_entry("type", "fixed")?;
+ if let Some(ref n) = name.namespace {
+ map.serialize_entry("namespace", n)?;
+ }
map.serialize_entry("name", &name.name)?;
if let Some(ref docstr) = doc {
map.serialize_entry("doc", docstr)?;
@@ -3119,4 +3125,88 @@ mod tests {
assert!(rs.get_names().contains_key(&Name::new(s).unwrap()));
}
}
+
+ #[test]
+ fn avro_3466_test_to_json_inner_enum_inner_namespace() {
+ let schema = r#"
+ {
+ "name": "record_name",
+ "namespace": "space",
+ "type": "record",
+ "fields": [
+ {
+ "name": "outer_field_1",
+ "type": [
+ "null",
+ {
+ "type":"enum",
+ "name":"inner_enum_name",
+ "namespace": "inner_space",
+ "symbols":["Extensive","Testing"]
+ }
+ ]
+ },
+ {
+ "name": "outer_field_2",
+ "type" : "inner_space.inner_enum_name"
+ }
+ ]
+ }
+ "#;
+ let schema = Schema::parse_str(schema).unwrap();
+ let rs = ResolvedSchema::try_from(&schema).expect("Schema didn't successfully parse");
+
+ // confirm we have expected 2 full-names
+ assert_eq!(rs.get_names().len(), 2);
+ for s in &["space.record_name", "inner_space.inner_enum_name"] {
+ assert!(rs.get_names().contains_key(&Name::new(s).unwrap()));
+ }
+
+ // convert Schema back to JSON string
+ let schema_str = serde_json::to_string(&schema).expect("test failed");
+ let _schema = Schema::parse_str(&schema_str).expect("test failed");
+ assert_eq!(schema, _schema);
+ }
+
+ #[test]
+ fn avro_3466_test_to_json_inner_fixed_inner_namespace() {
+ let schema = r#"
+ {
+ "name": "record_name",
+ "namespace": "space",
+ "type": "record",
+ "fields": [
+ {
+ "name": "outer_field_1",
+ "type": [
+ "null",
+ {
+ "type":"fixed",
+ "name":"inner_fixed_name",
+ "namespace": "inner_space",
+ "size":54
+ }
+ ]
+ },
+ {
+ "name": "outer_field_2",
+ "type" : "inner_space.inner_fixed_name"
+ }
+ ]
+ }
+ "#;
+ let schema = Schema::parse_str(schema).unwrap();
+ let rs = ResolvedSchema::try_from(&schema).expect("Schema didn't successfully parse");
+
+ // confirm we have expected 2 full-names
+ assert_eq!(rs.get_names().len(), 2);
+ for s in &["space.record_name", "inner_space.inner_fixed_name"] {
+ assert!(rs.get_names().contains_key(&Name::new(s).unwrap()));
+ }
+
+ // convert Schema back to JSON string
+ let schema_str = serde_json::to_string(&schema).expect("test failed");
+ let _schema = Schema::parse_str(&schema_str).expect("test failed");
+ assert_eq!(schema, _schema);
+ }
}