Change summary
src/chatstates.rs | 3 +++
src/lib.rs | 15 +++++++++++++++
2 files changed, 18 insertions(+)
Detailed changes
@@ -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<ChatState, Error> {
for _ in root.children() {
return Err(Error::ParseError("Unknown child in chatstate element."));
@@ -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<Box<MessagePayload>> {
+ 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
+ }
+}