Implement as_str on all Jid types

This is useful for printing with quotes without copying any data.
This commit is contained in:
Jonas Schäfer 2024-03-09 09:00:36 +01:00
parent 9608b59f60
commit 2c701038cd
3 changed files with 23 additions and 0 deletions

View file

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

View file

@ -141,6 +141,11 @@ impl InnerJid {
ResourceRef::from_str_unchecked(&self.normalized[slash + 1..]) 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 { impl FromStr for InnerJid {

View file

@ -196,6 +196,13 @@ impl Jid {
pub fn is_bare(&self) -> bool { pub fn is_bare(&self) -> bool {
!self.is_full() !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 { impl TryFrom<Jid> for FullJid {
@ -482,6 +489,11 @@ impl FullJid {
self.inner.slash = None; self.inner.slash = None;
BareJid { inner: self.inner } 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 { impl FromStr for BareJid {
@ -608,6 +620,11 @@ impl BareJid {
let resource = ResourcePart::new(resource)?; let resource = ResourcePart::new(resource)?;
Ok(self.with_resource(&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")] #[cfg(feature = "minidom")]