diff --git a/src/body.rs b/src/body.rs index 43bd6914852cfab737d2018e8215a49683158c1b..43c6c83387200a6ae5630bba6ccf9d954d051562 100644 --- a/src/body.rs +++ b/src/body.rs @@ -1,7 +1,6 @@ use minidom::Element; use error::Error; -use super::MessagePayload; // TODO: also support components and servers. use ns::JABBER_CLIENT_NS; @@ -11,8 +10,6 @@ pub struct Body { body: String, } -impl MessagePayload for Body {} - pub fn parse_body(root: &Element) -> Result { if !root.is("body", JABBER_CLIENT_NS) { return Err(Error::ParseError("This is not a body element.")); diff --git a/src/chatstates.rs b/src/chatstates.rs index d84880c6591faddc50ff759ea634fccd4d730fd0..77db1413459f600b36f9384402f1f60877affbdb 100644 --- a/src/chatstates.rs +++ b/src/chatstates.rs @@ -1,7 +1,6 @@ use minidom::Element; use error::Error; -use super::MessagePayload; use ns::CHATSTATES_NS; @@ -14,8 +13,6 @@ 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 8914a6c6eba0bded291f4200c76c06f3cd7c88bf..c6f93d93665ce445ceb32fdbfc48881d47e476e2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,16 +13,19 @@ pub mod ping; pub mod chatstates; pub mod ibb; -use std::fmt::Debug; use minidom::Element; -pub trait MessagePayload: Debug {} +#[derive(Debug)] +pub enum MessagePayload { + Body(body::Body), + ChatState(chatstates::ChatState), +} -pub fn parse_message_payload(elem: &Element) -> Option> { +pub fn parse_message_payload(elem: &Element) -> Option { if let Ok(body) = body::parse_body(elem) { - Some(Box::new(body)) + Some(MessagePayload::Body(body)) } else if let Ok(chatstate) = chatstates::parse_chatstate(elem) { - Some(Box::new(chatstate)) + Some(MessagePayload::ChatState(chatstate)) } else { None }