diff options
Diffstat (limited to 'stanza/src/xep_0060/event.rs')
-rw-r--r-- | stanza/src/xep_0060/event.rs | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/stanza/src/xep_0060/event.rs b/stanza/src/xep_0060/event.rs index bdd8b53..d2c150a 100644 --- a/stanza/src/xep_0060/event.rs +++ b/stanza/src/xep_0060/event.rs @@ -8,6 +8,8 @@ use peanuts::{ }; use crate::xep_0004::X; +#[cfg(feature = "xep_0172")] +use crate::xep_0172::{self, Nick}; pub const XMLNS: &str = "http://jabber.org/protocol/pubsub#event"; @@ -292,19 +294,28 @@ impl IntoElement for Item { #[derive(Clone, Debug)] pub enum Content { - Unknown, + #[cfg(feature = "xep_0172")] + Nick(Nick), + Unknown(Element), } impl FromElement for Content { - fn from_element(_element: Element) -> peanuts::element::DeserializeResult<Self> { - // TODO: types - return Ok(Self::Unknown); + fn from_element(element: Element) -> peanuts::element::DeserializeResult<Self> { + match element.identify() { + #[cfg(feature = "xep_0172")] + (Some(xep_0172::XMLNS), "nick") => Ok(Content::Nick(Nick::from_element(element)?)), + _ => Ok(Self::Unknown(element)), + } } } impl IntoElement for Content { fn builder(&self) -> peanuts::element::ElementBuilder { - panic!("unknown content cannot be serialized") + match self { + #[cfg(feature = "xep_0172")] + Content::Nick(nick) => nick.builder(), + Content::Unknown(_e) => panic!("unknown content cannot be serialized"), + } } } |