diff options
author | 2024-12-03 03:51:26 +0000 | |
---|---|---|
committer | 2024-12-03 03:51:26 +0000 | |
commit | 7c2577d196c059ab6e2d5b0efe5e036bdad75be7 (patch) | |
tree | 7649b705f0af85a8b521d8fa849f9ed77e2c201c /src/stanza/client/mod.rs | |
parent | be198ca15bbaf633c1535db5bae7091520546aed (diff) | |
download | luz-7c2577d196c059ab6e2d5b0efe5e036bdad75be7.tar.gz luz-7c2577d196c059ab6e2d5b0efe5e036bdad75be7.tar.bz2 luz-7c2577d196c059ab6e2d5b0efe5e036bdad75be7.zip |
implement remaining rfc6120 xml schemas
Diffstat (limited to 'src/stanza/client/mod.rs')
-rw-r--r-- | src/stanza/client/mod.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/stanza/client/mod.rs b/src/stanza/client/mod.rs index 7b25b15..25d7b56 100644 --- a/src/stanza/client/mod.rs +++ b/src/stanza/client/mod.rs @@ -1,6 +1,48 @@ +use iq::Iq; +use message::Message; +use peanuts::{ + element::{FromElement, IntoElement}, + DeserializeError, +}; +use presence::Presence; + +use super::stream::{self, Error as StreamError}; + pub mod error; pub mod iq; pub mod message; pub mod presence; pub const XMLNS: &str = "jabber:client"; + +pub enum Stanza { + Message(Message), + Presence(Presence), + Iq(Iq), + Error(StreamError), +} + +impl FromElement for Stanza { + fn from_element(element: peanuts::Element) -> peanuts::element::DeserializeResult<Self> { + match element.identify() { + (Some(XMLNS), "message") => Ok(Stanza::Message(Message::from_element(element)?)), + (Some(XMLNS), "presence") => Ok(Stanza::Presence(Presence::from_element(element)?)), + (Some(XMLNS), "iq") => Ok(Stanza::Iq(Iq::from_element(element)?)), + (Some(stream::XMLNS), "error") => { + Ok(Stanza::Error(StreamError::from_element(element)?)) + } + _ => Err(DeserializeError::UnexpectedElement(element)), + } + } +} + +impl IntoElement for Stanza { + fn builder(&self) -> peanuts::element::ElementBuilder { + match self { + Stanza::Message(message) => message.builder(), + Stanza::Presence(presence) => presence.builder(), + Stanza::Iq(iq) => iq.builder(), + Stanza::Error(error) => error.builder(), + } + } +} |