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

Kriskras99 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 cd74a9f  feat: Namespace for named types defined by this library (#558)
cd74a9f is described below

commit cd74a9f8f573bd9109ea3359e910fc8c2ff9eba9
Author: Kriskras99 <[email protected]>
AuthorDate: Thu Jun 18 08:53:39 2026 +0200

    feat: Namespace for named types defined by this library (#558)
---
 avro/src/documentation/serde_data_model_to_avro.rs |  6 +-
 avro/src/schema/name.rs                            |  6 ++
 avro/src/schema/union.rs                           | 27 +++++++++
 avro/src/serde/derive.rs                           | 68 +++++++++-------------
 avro/src/serde/deser_schema/mod.rs                 | 28 +++++++--
 avro/src/serde/ser_schema/mod.rs                   | 41 ++++++++-----
 avro/src/serde/ser_schema/union.rs                 | 21 +++++--
 avro/tests/serde_human_readable_false.rs           |  2 +-
 avro/tests/serde_human_readable_true.rs            |  2 +-
 avro_derive/tests/derive.rs                        | 10 +++-
 10 files changed, 136 insertions(+), 75 deletions(-)

diff --git a/avro/src/documentation/serde_data_model_to_avro.rs 
b/avro/src/documentation/serde_data_model_to_avro.rs
index e58a8e6..5ddb60b 100644
--- a/avro/src/documentation/serde_data_model_to_avro.rs
+++ b/avro/src/documentation/serde_data_model_to_avro.rs
@@ -29,10 +29,10 @@
 //!     - `bool` => [`Schema::Boolean`]
 //!     - `i8`, `i16`, `i32`, `u8`, `u16` => [`Schema::Int`]
 //!     - `i64`, `u32` => [`Schema::Long`]
-//!     - `u64` => [`Schema::Fixed`]`(name: "u64", size: 8)`
+//!     - `u64` => [`Schema::Fixed`]`(name: "org.apache.avro.rust.u64", size: 
8)`
 //!         - This is not a `Schema::Long` as that is a signed number of 
maximum 64 bits.
-//!     - `i128` => [`Schema::Fixed`]`(name: "i128", size: 16)`
-//!     - `u128` => [`Schema::Fixed`]`(name: "u128", size: 16)`
+//!     - `i128` => [`Schema::Fixed`]`(name: "org.apache.avro.rust.i128", 
size: 16)`
+//!     - `u128` => [`Schema::Fixed`]`(name: "org.apache.avro.rust.u128", 
size: 16)`
 //!     - `f32` => [`Schema::Float`]
 //!     - `f64` => [`Schema::Double`]
 //!     - `char` => [`Schema::String`]
diff --git a/avro/src/schema/name.rs b/avro/src/schema/name.rs
index aa22cee..bfb69f2 100644
--- a/avro/src/schema/name.rs
+++ b/avro/src/schema/name.rs
@@ -230,6 +230,12 @@ impl Debug for Name {
     }
 }
 
+impl AsRef<str> for Name {
+    fn as_ref(&self) -> &str {
+        self.namespace_and_name.as_ref()
+    }
+}
+
 impl Display for Name {
     fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
         assert!(
diff --git a/avro/src/schema/union.rs b/avro/src/schema/union.rs
index 9a2a1f3..1561c11 100644
--- a/avro/src/schema/union.rs
+++ b/avro/src/schema/union.rs
@@ -128,6 +128,33 @@ impl UnionSchema {
         Ok(None)
     }
 
+    /// Get the index and schema for the provided Rust type name.
+    ///
+    /// Will use `names` to resolve references.
+    pub(crate) fn find_fully_qualified_named_schema<'s>(
+        &'s self,
+        full_name: &str,
+        names: &'s HashMap<Name, impl Borrow<Schema>>,
+    ) -> Result<Option<(usize, &'s Schema)>, Error> {
+        for index in self.named_index.iter().copied() {
+            let schema = &self.schemas[index];
+            if let Some(schema_name) = schema.name()
+                && schema_name.as_ref() == full_name
+            {
+                let schema = if let Schema::Ref { name } = schema {
+                    names
+                        .get(name)
+                        .ok_or_else(|| 
Details::SchemaResolutionError(name.clone()))?
+                        .borrow()
+                } else {
+                    schema
+                };
+                return Ok(Some((index, schema)));
+            }
+        }
+        Ok(None)
+    }
+
     /// Find a [`Schema::Fixed`] with the given size.
     ///
     /// Will use `names` to resolve references.
diff --git a/avro/src/serde/derive.rs b/avro/src/serde/derive.rs
index 573b6b3..38f17bf 100644
--- a/avro/src/serde/derive.rs
+++ b/avro/src/serde/derive.rs
@@ -613,17 +613,16 @@ where
 }
 
 impl AvroSchemaComponent for core::time::Duration {
-    /// The schema is [`Schema::Record`] with the name `Duration`.
+    /// The schema is [`Schema::Record`] with the name 
`org.apache.avro.rust.Duration`.
     ///
     /// It has two fields:
-    /// - `secs` with the schema `Schema::Fixed(name: "u64", size: 8)`
+    /// - `secs` with the schema `Schema::Fixed(name: 
"org.apache.avro.rust.u64", size: 8)`
     /// - `nanos` with the schema `Schema::Long`
     fn get_schema_in_ctxt(
         named_schemas: &mut HashSet<Name>,
         enclosing_namespace: NamespaceRef,
     ) -> Schema {
-        let name = Name::new_with_enclosing_namespace("Duration", 
enclosing_namespace)
-            .expect("Name is valid");
+        let name = Name::new("org.apache.avro.rust.Duration").expect("Name is 
valid");
         if named_schemas.contains(&name) {
             Schema::Ref { name }
         } else {
@@ -657,17 +656,13 @@ impl AvroSchemaComponent for core::time::Duration {
 }
 
 impl AvroSchemaComponent for uuid::Uuid {
-    /// The schema is [`Schema::Uuid`] with the name `uuid`.
+    /// The schema is [`Schema::Uuid`] with the name 
`org.apache.avro.rust.Uuid`.
     ///
     /// The underlying schema is [`Schema::Fixed`] with a size of 16.
     ///
     /// If you're using `human_readable: true` you need to override this 
schema with a `Schema::String`.
-    fn get_schema_in_ctxt(
-        named_schemas: &mut HashSet<Name>,
-        enclosing_namespace: NamespaceRef,
-    ) -> Schema {
-        let name =
-            Name::new_with_enclosing_namespace("uuid", 
enclosing_namespace).expect("Name is valid");
+    fn get_schema_in_ctxt(named_schemas: &mut HashSet<Name>, _: NamespaceRef) 
-> Schema {
+        let name = Name::new("org.apache.avro.rust.Uuid").expect("Name is 
valid");
         if named_schemas.contains(&name) {
             Schema::Ref { name }
         } else {
@@ -692,13 +687,9 @@ impl AvroSchemaComponent for uuid::Uuid {
 }
 
 impl AvroSchemaComponent for u64 {
-    /// The schema is [`Schema::Fixed`] of size 8 with the name `u64`.
-    fn get_schema_in_ctxt(
-        named_schemas: &mut HashSet<Name>,
-        enclosing_namespace: NamespaceRef,
-    ) -> Schema {
-        let name =
-            Name::new_with_enclosing_namespace("u64", 
enclosing_namespace).expect("Name is valid");
+    /// The schema is [`Schema::Fixed`] of size 8 with the name 
`org.apache.avro.rust.u64`.
+    fn get_schema_in_ctxt(named_schemas: &mut HashSet<Name>, _: NamespaceRef) 
-> Schema {
+        let name = Name::new("org.apache.avro.rust.u64").expect("Name is 
valid");
         if named_schemas.contains(&name) {
             Schema::Ref { name }
         } else {
@@ -723,13 +714,9 @@ impl AvroSchemaComponent for u64 {
 }
 
 impl AvroSchemaComponent for u128 {
-    /// The schema is [`Schema::Fixed`] of size 16 with the name `u128`.
-    fn get_schema_in_ctxt(
-        named_schemas: &mut HashSet<Name>,
-        enclosing_namespace: NamespaceRef,
-    ) -> Schema {
-        let name =
-            Name::new_with_enclosing_namespace("u128", 
enclosing_namespace).expect("Name is valid");
+    /// The schema is [`Schema::Fixed`] of size 16 with the name 
`org.apache.avro.rust.u128`.
+    fn get_schema_in_ctxt(named_schemas: &mut HashSet<Name>, _: NamespaceRef) 
-> Schema {
+        let name = Name::new("org.apache.avro.rust.u128").expect("Name is 
valid");
         if named_schemas.contains(&name) {
             Schema::Ref { name }
         } else {
@@ -754,13 +741,9 @@ impl AvroSchemaComponent for u128 {
 }
 
 impl AvroSchemaComponent for i128 {
-    /// The schema is [`Schema::Fixed`] of size 16 with the name `i128`.
-    fn get_schema_in_ctxt(
-        named_schemas: &mut HashSet<Name>,
-        enclosing_namespace: NamespaceRef,
-    ) -> Schema {
-        let name =
-            Name::new_with_enclosing_namespace("i128", 
enclosing_namespace).expect("Name is valid");
+    /// The schema is [`Schema::Fixed`] of size 16 with the name 
`org.apache.avro.rust.i128`.
+    fn get_schema_in_ctxt(named_schemas: &mut HashSet<Name>, _: NamespaceRef) 
-> Schema {
+        let name = Name::new("org.apache.avro.rust.i128").expect("Name is 
valid");
         if named_schemas.contains(&name) {
             Schema::Ref { name }
         } else {
@@ -1028,7 +1011,7 @@ mod tests {
         assert_eq!(
             schema,
             Schema::Fixed(FixedSchema {
-                name: Name::new("u64")?,
+                name: Name::new("org.apache.avro.rust.u64")?,
                 aliases: None,
                 doc: None,
                 size: 8,
@@ -1045,7 +1028,7 @@ mod tests {
         assert_eq!(
             schema,
             Schema::Fixed(FixedSchema {
-                name: Name::new("i128")?,
+                name: Name::new("org.apache.avro.rust.i128")?,
                 aliases: None,
                 doc: None,
                 size: 16,
@@ -1062,7 +1045,7 @@ mod tests {
         assert_eq!(
             schema,
             Schema::Fixed(FixedSchema {
-                name: Name::new("u128")?,
+                name: Name::new("org.apache.avro.rust.u128")?,
                 aliases: None,
                 doc: None,
                 size: 16,
@@ -1103,8 +1086,9 @@ mod tests {
             r#"{
             "type": "record",
             "name": "Duration",
+            "namespace": "org.apache.avro.rust",
             "fields": [
-                { "name": "secs", "type": {"type": "fixed", "name": "u64", 
"size": 8} },
+                { "name": "secs", "type": {"type": "fixed", "name": "u64", 
"namespace": "org.apache.avro.rust", "size": 8} },
                 { "name": "nanos", "type": "long" }
             ]
         }"#,
@@ -1166,10 +1150,10 @@ mod tests {
         let schema = Schema::parse_str(
             r#"{
             "type": "record",
-            "name": "A2_u2_n_r4_uuid",
+            "name": "A2_u2_n_r25_org_apache_avro_rust_Uuid",
             "fields": [
-                { "name": "field_0", "type": ["null", {"type": "fixed", 
"logicalType": "uuid", "size": 16, "name": "uuid"}], "default": null },
-                { "name": "field_1", "type": ["null", "uuid"], "default": null 
}
+                { "name": "field_0", "type": ["null", {"type": "fixed", 
"logicalType": "uuid", "size": 16, "name": "Uuid", "namespace": 
"org.apache.avro.rust"}], "default": null },
+                { "name": "field_1", "type": ["null", 
"org.apache.avro.rust.Uuid"], "default": null }
             ]
         }"#,
         )?;
@@ -1211,10 +1195,10 @@ mod tests {
         let schema = Schema::parse_str(
             r#"{
             "type": "record",
-            "name": "T3_u2_n_r4_uuid_r4_uuid_s",
+            "name": 
"T3_u2_n_r25_org_apache_avro_rust_Uuid_r25_org_apache_avro_rust_Uuid_s",
             "fields": [
-                { "name": "field_0", "type": ["null", {"type": "fixed", 
"logicalType": "uuid", "size": 16, "name": "uuid"}], "default": null },
-                { "name": "field_1", "type": "uuid" },
+                { "name": "field_0", "type": ["null", {"type": "fixed", 
"logicalType": "uuid", "size": 16, "name": "Uuid", "namespace": 
"org.apache.avro.rust"}], "default": null },
+                { "name": "field_1", "type": "org.apache.avro.rust.Uuid" },
                 { "name": "field_2", "type": "string" }
             ]
         }"#,
diff --git a/avro/src/serde/deser_schema/mod.rs 
b/avro/src/serde/deser_schema/mod.rs
index ba8590c..45287a3 100644
--- a/avro/src/serde/deser_schema/mod.rs
+++ b/avro/src/serde/deser_schema/mod.rs
@@ -348,11 +348,16 @@ impl<'de, 's, 'r, R: Read, S: Borrow<Schema>> 
Deserializer<'de>
         V: Visitor<'de>,
     {
         match self.schema {
-            Schema::Fixed(fixed) if fixed.size == 16 && fixed.name.name() == 
"i128" => {
+            Schema::Fixed(fixed)
+                if fixed.size == 16 && fixed.name.as_ref() == 
"org.apache.avro.rust.i128" =>
+            {
                 visitor.visit_i128(i128::from_le_bytes(self.read_array()?))
             }
             Schema::Union(union) => 
self.with_union(union)?.deserialize_i128(visitor),
-            _ => Err(self.error("i128", r#"Expected Schema::Fixed(name: 
"i128", size: 16)"#)),
+            _ => Err(self.error(
+                "i128",
+                r#"Expected Schema::Fixed(name: "org.apache.avro.rust.i128", 
size: 16)"#,
+            )),
         }
     }
 
@@ -405,11 +410,16 @@ impl<'de, 's, 'r, R: Read, S: Borrow<Schema>> 
Deserializer<'de>
         V: Visitor<'de>,
     {
         match self.schema {
-            Schema::Fixed(fixed) if fixed.size == 8 && fixed.name.name() == 
"u64" => {
+            Schema::Fixed(fixed)
+                if fixed.size == 8 && fixed.name.as_ref() == 
"org.apache.avro.rust.u64" =>
+            {
                 visitor.visit_u64(u64::from_le_bytes(self.read_array()?))
             }
             Schema::Union(union) => 
self.with_union(union)?.deserialize_u64(visitor),
-            _ => Err(self.error("u64", r#"Expected Schema::Fixed(name: "u64", 
size: 8)"#)),
+            _ => Err(self.error(
+                "u64",
+                r#"Expected Schema::Fixed(name: "org.apache.avro.rust.u64", 
size: 8)"#,
+            )),
         }
     }
 
@@ -418,11 +428,16 @@ impl<'de, 's, 'r, R: Read, S: Borrow<Schema>> 
Deserializer<'de>
         V: Visitor<'de>,
     {
         match self.schema {
-            Schema::Fixed(fixed) if fixed.size == 16 && fixed.name.name() == 
"u128" => {
+            Schema::Fixed(fixed)
+                if fixed.size == 16 && fixed.name.as_ref() == 
"org.apache.avro.rust.u128" =>
+            {
                 visitor.visit_u128(u128::from_le_bytes(self.read_array()?))
             }
             Schema::Union(union) => 
self.with_union(union)?.deserialize_u128(visitor),
-            _ => Err(self.error("u128", r#"Expected Schema::Fixed(name: 
"u128", size: 16)"#)),
+            _ => Err(self.error(
+                "u128",
+                r#"Expected Schema::Fixed(name: "org.apache.avro.rust.u128", 
size: 16)"#,
+            )),
         }
     }
 
@@ -1199,6 +1214,7 @@ mod tests {
                             "type": {
                                 "type": "fixed",
                                 "name": "u64",
+                                "namespace": "org.apache.avro.rust",
                                 "size": 8
                             }
                         }]
diff --git a/avro/src/serde/ser_schema/mod.rs b/avro/src/serde/ser_schema/mod.rs
index d6975e2..337268a 100644
--- a/avro/src/serde/ser_schema/mod.rs
+++ b/avro/src/serde/ser_schema/mod.rs
@@ -249,13 +249,18 @@ impl<'s, 'w, W: Write, S: Borrow<Schema>> Serializer for 
SchemaAwareSerializer<'
 
     fn serialize_i128(mut self, v: i128) -> Result<Self::Ok, Self::Error> {
         match self.schema {
-            Schema::Fixed(fixed) if fixed.size == 16 && fixed.name.name() == 
"i128" => {
+            Schema::Fixed(fixed)
+                if fixed.size == 16 && fixed.name.as_ref() == 
"org.apache.avro.rust.i128" =>
+            {
                 self.write_array(v.to_le_bytes())
             }
             Schema::Union(union) => {
                 UnionSerializer::new(self.writer, union, 
self.config).serialize_i128(v)
             }
-            _ => Err(self.error("i128", r#"Expected Schema::Fixed(name: 
"i128", size: 16)"#)),
+            _ => Err(self.error(
+                "i128",
+                r#"Expected Schema::Fixed(name: "org.apache.avro.rust.i128", 
size: 16)"#,
+            )),
         }
     }
 
@@ -273,25 +278,35 @@ impl<'s, 'w, W: Write, S: Borrow<Schema>> Serializer for 
SchemaAwareSerializer<'
 
     fn serialize_u64(mut self, v: u64) -> Result<Self::Ok, Self::Error> {
         match self.schema {
-            Schema::Fixed(fixed) if fixed.size == 8 && fixed.name.name() == 
"u64" => {
+            Schema::Fixed(fixed)
+                if fixed.size == 8 && fixed.name.as_ref() == 
"org.apache.avro.rust.u64" =>
+            {
                 self.write_array(v.to_le_bytes())
             }
             Schema::Union(union) => {
                 UnionSerializer::new(self.writer, union, 
self.config).serialize_u64(v)
             }
-            _ => Err(self.error("u64", r#"Expected Schema::Fixed(name: "u64", 
size: 8)"#)),
+            _ => Err(self.error(
+                "u64",
+                r#"Expected Schema::Fixed(name: "org.apache.avro.rust.u64", 
size: 8)"#,
+            )),
         }
     }
 
     fn serialize_u128(mut self, v: u128) -> Result<Self::Ok, Self::Error> {
         match self.schema {
-            Schema::Fixed(fixed) if fixed.size == 16 && fixed.name.name() == 
"u128" => {
+            Schema::Fixed(fixed)
+                if fixed.size == 16 && fixed.name.as_ref() == 
"org.apache.avro.rust.u128" =>
+            {
                 self.write_array(v.to_le_bytes())
             }
             Schema::Union(union) => {
                 UnionSerializer::new(self.writer, union, 
self.config).serialize_u128(v)
             }
-            _ => Err(self.error("u128", r#"Expected Schema::Fixed(name: 
"u128", size: 16)"#)),
+            _ => Err(self.error(
+                "u128",
+                r#"Expected Schema::Fixed(name: "org.apache.avro.rust.u128", 
size: 16)"#,
+            )),
         }
     }
 
@@ -921,7 +936,7 @@ mod tests {
             24u64,
             &schema,
             &names,
-            r#"Failed to serialize value of type `u64` using Schema::Long: 
Expected Schema::Fixed(name: "u64", size: 8)"#,
+            r#"Failed to serialize value of type `u64` using Schema::Long: 
Expected Schema::Fixed(name: "org.apache.avro.rust.u64", size: 8)"#,
         );
         assert_serialize_err(
             "",
@@ -2049,7 +2064,7 @@ mod tests {
     #[test]
     fn avro_rs_414_serialize_i128_as_fixed() -> TestResult {
         let schema = Schema::Fixed(FixedSchema {
-            name: Name::new("i128")?,
+            name: Name::new("org.apache.avro.rust.i128")?,
             aliases: None,
             doc: None,
             size: 16,
@@ -2085,7 +2100,7 @@ mod tests {
             i128::MAX,
             &schema,
             &names,
-            r#"Failed to serialize value of type `i128` using 
Schema::Fixed(FixedSchema { name: Name { name: "onehundredtwentyeight", .. }, 
size: 16, .. }): Expected Schema::Fixed(name: "i128", size: 16)"#,
+            r#"Failed to serialize value of type `i128` using 
Schema::Fixed(FixedSchema { name: Name { name: "onehundredtwentyeight", .. }, 
size: 16, .. }): Expected Schema::Fixed(name: "org.apache.avro.rust.i128", 
size: 16)"#,
         );
 
         Ok(())
@@ -2106,7 +2121,7 @@ mod tests {
             i128::MAX,
             &schema,
             &names,
-            r#"Failed to serialize value of type `i128` using 
Schema::Fixed(FixedSchema { name: Name { name: "i128", .. }, size: 8, .. }): 
Expected Schema::Fixed(name: "i128", size: 16)"#,
+            r#"Failed to serialize value of type `i128` using 
Schema::Fixed(FixedSchema { name: Name { name: "i128", .. }, size: 8, .. }): 
Expected Schema::Fixed(name: "org.apache.avro.rust.i128", size: 16)"#,
         );
 
         Ok(())
@@ -2115,7 +2130,7 @@ mod tests {
     #[test]
     fn avro_rs_414_serialize_u128_as_fixed() -> TestResult {
         let schema = Schema::Fixed(FixedSchema {
-            name: Name::new("u128")?,
+            name: Name::new("org.apache.avro.rust.u128")?,
             aliases: None,
             doc: None,
             size: 16,
@@ -2151,7 +2166,7 @@ mod tests {
             u128::MAX,
             &schema,
             &names,
-            r#"Failed to serialize value of type `u128` using 
Schema::Fixed(FixedSchema { name: Name { name: "onehundredtwentyeight", .. }, 
size: 16, .. }): Expected Schema::Fixed(name: "u128", size: 16)"#,
+            r#"Failed to serialize value of type `u128` using 
Schema::Fixed(FixedSchema { name: Name { name: "onehundredtwentyeight", .. }, 
size: 16, .. }): Expected Schema::Fixed(name: "org.apache.avro.rust.u128", 
size: 16)"#,
         );
 
         Ok(())
@@ -2172,7 +2187,7 @@ mod tests {
             u128::MAX,
             &schema,
             &names,
-            r#"Failed to serialize value of type `u128` using 
Schema::Fixed(FixedSchema { name: Name { name: "u128", .. }, size: 8, .. }): 
Expected Schema::Fixed(name: "u128", size: 16)"#,
+            r#"Failed to serialize value of type `u128` using 
Schema::Fixed(FixedSchema { name: Name { name: "u128", .. }, size: 8, .. }): 
Expected Schema::Fixed(name: "org.apache.avro.rust.u128", size: 16)"#,
         );
 
         Ok(())
diff --git a/avro/src/serde/ser_schema/union.rs 
b/avro/src/serde/ser_schema/union.rs
index d1aa73e..1a7cf45 100644
--- a/avro/src/serde/ser_schema/union.rs
+++ b/avro/src/serde/ser_schema/union.rs
@@ -166,7 +166,10 @@ impl<'s, 'w, W: Write, S: Borrow<Schema>> Serializer for 
UnionSerializer<'s, 'w,
     }
 
     fn serialize_i128(mut self, v: i128) -> Result<Self::Ok, Self::Error> {
-        match self.union.find_named_schema("i128", self.config.names)? {
+        match self
+            .union
+            .find_fully_qualified_named_schema("org.apache.avro.rust.i128", 
self.config.names)?
+        {
             Some((index, Schema::Fixed(FixedSchema { size: 16, .. }))) => {
                 let mut bytes_written = zig_i32(index as i32, &mut 
*self.writer)?;
                 bytes_written += self.write_array(v.to_le_bytes())?;
@@ -174,7 +177,7 @@ impl<'s, 'w, W: Write, S: Borrow<Schema>> Serializer for 
UnionSerializer<'s, 'w,
             }
             _ => Err(self.error(
                 "i128",
-                r#"Expected Schema::Fixed(name: "i128", size: 16) in 
variants"#,
+                r#"Expected Schema::Fixed(name: "org.apache.avro.rust.i128", 
size: 16) in variants"#,
             )),
         }
     }
@@ -192,7 +195,10 @@ impl<'s, 'w, W: Write, S: Borrow<Schema>> Serializer for 
UnionSerializer<'s, 'w,
     }
 
     fn serialize_u64(mut self, v: u64) -> Result<Self::Ok, Self::Error> {
-        match self.union.find_named_schema("u64", self.config.names)? {
+        match self
+            .union
+            .find_fully_qualified_named_schema("org.apache.avro.rust.u64", 
self.config.names)?
+        {
             Some((index, Schema::Fixed(FixedSchema { size: 8, .. }))) => {
                 let mut bytes_written = zig_i32(index as i32, &mut 
*self.writer)?;
                 bytes_written += self.write_array(v.to_le_bytes())?;
@@ -200,13 +206,16 @@ impl<'s, 'w, W: Write, S: Borrow<Schema>> Serializer for 
UnionSerializer<'s, 'w,
             }
             _ => Err(self.error(
                 "u64",
-                r#"Expected Schema::Fixed(name: "u64", size: 8) in variants"#,
+                r#"Expected Schema::Fixed(name: "org.apache.avro.rust.u64", 
size: 8) in variants"#,
             )),
         }
     }
 
     fn serialize_u128(mut self, v: u128) -> Result<Self::Ok, Self::Error> {
-        match self.union.find_named_schema("u128", self.config.names)? {
+        match self
+            .union
+            .find_fully_qualified_named_schema("org.apache.avro.rust.u128", 
self.config.names)?
+        {
             Some((index, Schema::Fixed(FixedSchema { size: 16, .. }))) => {
                 let mut bytes_written = zig_i32(index as i32, &mut 
*self.writer)?;
                 bytes_written += self.write_array(v.to_le_bytes())?;
@@ -214,7 +223,7 @@ impl<'s, 'w, W: Write, S: Borrow<Schema>> Serializer for 
UnionSerializer<'s, 'w,
             }
             _ => Err(self.error(
                 "u128",
-                r#"Expected Schema::Fixed(name: "u128", size: 16) in 
variants"#,
+                r#"Expected Schema::Fixed(name: "org.apache.avro.rust.u128", 
size: 16) in variants"#,
             )),
         }
     }
diff --git a/avro/tests/serde_human_readable_false.rs 
b/avro/tests/serde_human_readable_false.rs
index 544e09e..e4e6013 100644
--- a/avro/tests/serde_human_readable_false.rs
+++ b/avro/tests/serde_human_readable_false.rs
@@ -136,7 +136,7 @@ fn avro_rs_440_uuid_fixed() -> TestResult {
     assert_eq!(
         buffer.as_slice(),
         &[
-            195, 1, 22, 19, 155, 41, 216, 175, 73, 144, 85, 14, 132, 0, 226, 
155, 65, 212, 167, 22,
+            195, 1, 68, 197, 49, 158, 70, 248, 114, 20, 85, 14, 132, 0, 226, 
155, 65, 212, 167, 22,
             68, 102, 85, 68, 0, 0
         ][..]
     );
diff --git a/avro/tests/serde_human_readable_true.rs 
b/avro/tests/serde_human_readable_true.rs
index 83ef941..f23570c 100644
--- a/avro/tests/serde_human_readable_true.rs
+++ b/avro/tests/serde_human_readable_true.rs
@@ -129,7 +129,7 @@ fn avro_rs_440_uuid_fixed() -> TestResult {
     let writer = SpecificSingleObjectWriter::new()?;
     assert_eq!(
         writer.write(uuid, &mut buffer).unwrap_err().to_string(),
-        r#"Failed to serialize value of type `str` using 
Schema::Uuid(Fixed(FixedSchema { name: Name { name: "uuid", .. }, size: 16, .. 
})): Expected Schema::String | Schema::Uuid(String)"#
+        r#"Failed to serialize value of type `str` using 
Schema::Uuid(Fixed(FixedSchema { name: Name { name: "Uuid", namespace: 
Some("org.apache.avro.rust") }, size: 16, .. })): Expected Schema::String | 
Schema::Uuid(String)"#
     );
 
     Ok(())
diff --git a/avro_derive/tests/derive.rs b/avro_derive/tests/derive.rs
index 42835db..e2509c3 100644
--- a/avro_derive/tests/derive.rs
+++ b/avro_derive/tests/derive.rs
@@ -1954,7 +1954,8 @@ fn avro_rs_397_uuid() {
                 "type":{
                     "type":"fixed",
                     "logicalType":"uuid",
-                    "name":"uuid",
+                    "name":"Uuid",
+                    "namespace": "org.apache.avro.rust",
                     
"default":"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
                     "size":16
                 }
@@ -2140,6 +2141,7 @@ fn avro_rs_414_round_trip_char_u64_u128_i128() {
             "name": "b",
             "type": {
                 "name": "u64",
+                "namespace": "org.apache.avro.rust",
                 "type": "fixed",
                 "size": 8
             }
@@ -2148,6 +2150,7 @@ fn avro_rs_414_round_trip_char_u64_u128_i128() {
             "name": "c",
             "type": {
                 "name": "u128",
+                "namespace": "org.apache.avro.rust",
                 "type": "fixed",
                 "size": 16
             }
@@ -2156,6 +2159,7 @@ fn avro_rs_414_round_trip_char_u64_u128_i128() {
             "name": "d",
             "type": {
                 "name": "i128",
+                "namespace": "org.apache.avro.rust",
                 "type": "fixed",
                 "size": 16
             }
@@ -2420,7 +2424,7 @@ fn avro_rs_476_field_default() {
     let schema = Foo::get_schema();
     assert_eq!(
         serde_json::to_string(&schema).unwrap(),
-        
r#"{"type":"record","name":"Foo","fields":[{"name":"_a","type":"boolean"},{"name":"_b","type":"int"},{"name":"_c","type":"int"},{"name":"_d","type":"int"},{"name":"_e","type":"long"},{"name":"_f","type":"int"},{"name":"_g","type":"int"},{"name":"_h","type":"long"},{"name":"_i","type":"float"},{"name":"_j","type":"double"},{"name":"_k","type":"string"},{"name":"_l","type":"string"},{"name":"_m","type":"string"},{"name":"_n","type":{"type":"record","name":"Spam","fields":[{"name":"
 [...]
+        
r#"{"type":"record","name":"Foo","fields":[{"name":"_a","type":"boolean"},{"name":"_b","type":"int"},{"name":"_c","type":"int"},{"name":"_d","type":"int"},{"name":"_e","type":"long"},{"name":"_f","type":"int"},{"name":"_g","type":"int"},{"name":"_h","type":"long"},{"name":"_i","type":"float"},{"name":"_j","type":"double"},{"name":"_k","type":"string"},{"name":"_l","type":"string"},{"name":"_m","type":"string"},{"name":"_n","type":{"type":"record","name":"Spam","fields":[{"name":"
 [...]
     );
 }
 
@@ -2531,7 +2535,7 @@ fn avro_rs_476_field_default_provided() {
     let schema = Foo::get_schema();
     assert_eq!(
         serde_json::to_string(&schema).unwrap(),
-        
r#"{"type":"record","name":"Foo","fields":[{"name":"_a","type":"boolean","default":true},{"name":"_b","type":"int","default":42},{"name":"_c","type":"int","default":42},{"name":"_d","type":"int","default":42},{"name":"_e","type":"long","default":42},{"name":"_f","type":"int","default":42},{"name":"_g","type":"int","default":42},{"name":"_h","type":"long","default":42},{"name":"_i","type":"float","default":42.0},{"name":"_j","type":"double","default":42.0},{"name":"_k","type":"str
 [...]
+        
r#"{"type":"record","name":"Foo","fields":[{"name":"_a","type":"boolean","default":true},{"name":"_b","type":"int","default":42},{"name":"_c","type":"int","default":42},{"name":"_d","type":"int","default":42},{"name":"_e","type":"long","default":42},{"name":"_f","type":"int","default":42},{"name":"_g","type":"int","default":42},{"name":"_h","type":"long","default":42},{"name":"_i","type":"float","default":42.0},{"name":"_j","type":"double","default":42.0},{"name":"_k","type":"str
 [...]
     );
 }
 

Reply via email to