Add a MessagePayload trait, and implement it for Body and ChatState.

Emmanuel Gil Peyrot created

Change summary

src/chatstates.rs |  3 +++
src/lib.rs        | 15 +++++++++++++++
2 files changed, 18 insertions(+)

Detailed changes

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<ChatState, Error> {
     for _ in root.children() {
         return Err(Error::ParseError("Unknown child in chatstate element."));

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<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
+    }
+}