Add more helpers on Jid to convert to Bare/FullJid

Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
This commit is contained in:
Maxime “pep” Buquet 2019-09-08 22:09:25 +02:00
parent 1638288644
commit 0138a62957

View file

@ -14,7 +14,7 @@
//! //!
//! For usage, check the documentation on the `Jid` struct. //! For usage, check the documentation on the `Jid` struct.
use std::convert::Into; use std::convert::{Into, TryFrom};
use std::error::Error as StdError; use std::error::Error as StdError;
use std::fmt; use std::fmt;
use std::str::FromStr; use std::str::FromStr;
@ -121,6 +121,26 @@ impl Jid {
} }
} }
impl From<Jid> for BareJid {
fn from(jid: Jid) -> BareJid {
match jid {
Jid::Full(full) => full.into(),
Jid::Bare(bare) => bare,
}
}
}
impl TryFrom<Jid> for FullJid {
type Error = JidParseError;
fn try_from(jid: Jid) -> Result<Self, Self::Error> {
match jid {
Jid::Full(full) => Ok(full),
Jid::Bare(_) => Err(JidParseError::NoResource),
}
}
}
/// A struct representing a full Jabber ID. /// A struct representing a full Jabber ID.
/// ///
/// A full Jabber ID is composed of 3 components, of which one is optional: /// A full Jabber ID is composed of 3 components, of which one is optional:
@ -684,6 +704,29 @@ mod tests {
); );
} }
#[test]
fn jid_to_full_bare() {
let full = FullJid::new("a", "b.c", "d");
let bare = BareJid::new("a", "b.c");
assert_eq!(
FullJid::try_from(Jid::Full(full.clone())),
Ok(full.clone()),
);
assert_eq!(
FullJid::try_from(Jid::Bare(bare.clone())),
Err(JidParseError::NoResource),
);
assert_eq!(
BareJid::from(Jid::Full(full.clone())),
bare.clone(),
);
assert_eq!(
BareJid::from(Jid::Bare(bare.clone())),
bare,
);
}
#[test] #[test]
fn serialise() { fn serialise() {
assert_eq!( assert_eq!(