diff --git a/src/chatstates.rs b/src/chatstates.rs index 6ec2e22df947ad3d050967c931f555a76c9c43bf..8941408dbdecdf19f46fea81172f660f5dfc4671 100644 --- a/src/chatstates.rs +++ b/src/chatstates.rs @@ -1,6 +1,7 @@ use minidom::Element; use error::Error; +use super::MessagePayload; use ns::CHATSTATES_NS; @@ -13,6 +14,8 @@ pub enum ChatState { Paused, } +impl MessagePayload for ChatState {} + pub fn parse_chatstate(root: &Element) -> Result { for _ in root.children() { return Err(Error::ParseError("Unknown child in chatstate element.")); diff --git a/src/lib.rs b/src/lib.rs index e0798c12882cb74615f84ffa422a90356b6ba465..8914a6c6eba0bded291f4200c76c06f3cd7c88bf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,3 +12,18 @@ pub mod jingle; pub mod ping; pub mod chatstates; pub mod ibb; + +use std::fmt::Debug; +use minidom::Element; + +pub trait MessagePayload: Debug {} + +pub fn parse_message_payload(elem: &Element) -> Option> { + if let Ok(body) = body::parse_body(elem) { + Some(Box::new(body)) + } else if let Ok(chatstate) = chatstates::parse_chatstate(elem) { + Some(Box::new(chatstate)) + } else { + None + } +}