Implement `as_str` on all Jid types

Jonas Schรคfer created

This is useful for printing with quotes without copying any data.

Change summary

jid/CHANGELOG.md |  1 +
jid/src/inner.rs |  5 +++++
jid/src/lib.rs   | 17 +++++++++++++++++
3 files changed, 23 insertions(+)

Detailed changes

jid/CHANGELOG.md ๐Ÿ”—

@@ -20,6 +20,7 @@ Version xxx, release xxx:
       `impl From<DomainPart> for BareJid` and
       `impl From<DomainPart> for Jid`, both of which are (unlike
       `::from_parts`) copy-free.
+    - `as_str` methods have been added on all Jid types.
 
 Version 0.10.0, release 2023-08-17:
   * Breaking

jid/src/inner.rs ๐Ÿ”—

@@ -141,6 +141,11 @@ impl InnerJid {
             ResourceRef::from_str_unchecked(&self.normalized[slash + 1..])
         })
     }
+
+    #[inline(always)]
+    pub(crate) fn as_str(&self) -> &str {
+        self.normalized.as_str()
+    }
 }
 
 impl FromStr for InnerJid {

jid/src/lib.rs ๐Ÿ”—

@@ -196,6 +196,13 @@ impl Jid {
     pub fn is_bare(&self) -> bool {
         !self.is_full()
     }
+
+    /// Return a reference to the canonical string representation of the JID.
+    pub fn as_str(&self) -> &str {
+        match self {
+            Jid::Bare(BareJid { inner }) | Jid::Full(FullJid { inner }) => inner.as_str(),
+        }
+    }
 }
 
 impl TryFrom<Jid> for FullJid {
@@ -482,6 +489,11 @@ impl FullJid {
         self.inner.slash = None;
         BareJid { inner: self.inner }
     }
+
+    /// Return a reference to the canonical string representation of the JID.
+    pub fn as_str(&self) -> &str {
+        self.inner.as_str()
+    }
 }
 
 impl FromStr for BareJid {
@@ -608,6 +620,11 @@ impl BareJid {
         let resource = ResourcePart::new(resource)?;
         Ok(self.with_resource(&resource))
     }
+
+    /// Return a reference to the canonical string representation of the JID.
+    pub fn as_str(&self) -> &str {
+        self.inner.as_str()
+    }
 }
 
 #[cfg(feature = "minidom")]