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

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

commit 261c11fc2543237e040c53828f15193d670ab04a
Author: Kriskras99 <[email protected]>
AuthorDate: Fri Sep 4 21:49:10 2026 +0200

    feat: Use `Arc<str>` instead of `String` inside `Name`
    
    We do a lot of cloning of `Name`s without modifying them, this makes
    that a lot cheaper.
---
 avro/src/schema/name.rs | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/avro/src/schema/name.rs b/avro/src/schema/name.rs
index bfb69f2..057ae90 100644
--- a/avro/src/schema/name.rs
+++ b/avro/src/schema/name.rs
@@ -15,19 +15,19 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use serde::{Deserialize, Serialize, Serializer};
-use serde_json::{Map, Value};
-use std::borrow::Cow;
-use std::collections::HashMap;
-use std::fmt::{Debug, Display, Formatter};
-use std::str::FromStr;
-
 use crate::{
     AvroResult, Error, Schema,
     error::Details,
     util::MapHelper,
     validator::{validate_namespace, validate_schema_name},
 };
+use serde::{Deserialize, Serialize, Serializer};
+use serde_json::{Map, Value};
+use std::borrow::Cow;
+use std::collections::HashMap;
+use std::fmt::{Debug, Display, Formatter};
+use std::str::FromStr;
+use std::sync::Arc;
 
 /// Represents names for `record`, `enum` and `fixed` Avro schemas.
 ///
@@ -42,7 +42,7 @@ use crate::{
 #[derive(Clone, Hash, PartialEq, Eq)]
 pub struct Name {
     /// The full name
-    namespace_and_name: String,
+    namespace_and_name: Arc<str>,
     /// Start byte of the name part
     ///
     /// If this is zero, then there is no namespace.
@@ -91,7 +91,7 @@ impl Name {
         {
             validate_namespace(namespace)?;
             Ok(Self {
-                namespace_and_name: format!("{namespace}.{name_ref}"),
+                namespace_and_name: format!("{namespace}.{name_ref}").into(),
                 index_of_name: namespace.len() + 1,
             })
         } else if index_of_name == 1 {
@@ -102,7 +102,7 @@ impl Name {
             })
         } else {
             Ok(Self {
-                namespace_and_name: name.into(),
+                namespace_and_name: Arc::from(name.into()),
                 index_of_name,
             })
         }
@@ -143,7 +143,7 @@ impl Name {
         {
             format!("{namespace}.{}", self.namespace_and_name)
         } else {
-            self.namespace_and_name.clone()
+            self.namespace_and_name.to_string()
         }
     }
 
@@ -167,7 +167,7 @@ impl Name {
             && !namespace.is_empty()
         {
             Cow::Owned(Self {
-                namespace_and_name: format!("{namespace}.{}", 
self.namespace_and_name),
+                namespace_and_name: format!("{namespace}.{}", 
self.namespace_and_name).into(),
                 index_of_name: namespace.len() + 1,
             })
         } else {
@@ -183,7 +183,7 @@ impl Name {
     /// Using this name will cause a panic.
     pub(crate) fn invalid_empty_name() -> Self {
         Self {
-            namespace_and_name: String::new(),
+            namespace_and_name: Arc::default(),
             index_of_name: usize::MAX,
         }
     }
@@ -342,7 +342,7 @@ mod tests {
     /// Zero-length namespace is considered as no-namespace.
     fn test_namespace_from_name_with_empty_value() -> TestResult {
         let name = Name::new(".name")?;
-        assert_eq!(name.namespace_and_name, "name");
+        assert_eq!(name.namespace_and_name.as_ref(), "name");
         assert_eq!(name.index_of_name, 0);
 
         Ok(())

Reply via email to