Add a MessagePayload trait, and implement it for Body and ChatState.
This commit is contained in:
parent
948ecd7dd7
commit
6a0724d133
2 changed files with 18 additions and 0 deletions
|
@ -1,6 +1,7 @@
|
||||||
use minidom::Element;
|
use minidom::Element;
|
||||||
|
|
||||||
use error::Error;
|
use error::Error;
|
||||||
|
use super::MessagePayload;
|
||||||
|
|
||||||
use ns::CHATSTATES_NS;
|
use ns::CHATSTATES_NS;
|
||||||
|
|
||||||
|
@ -13,6 +14,8 @@ pub enum ChatState {
|
||||||
Paused,
|
Paused,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl MessagePayload for ChatState {}
|
||||||
|
|
||||||
pub fn parse_chatstate(root: &Element) -> Result<ChatState, Error> {
|
pub fn parse_chatstate(root: &Element) -> Result<ChatState, Error> {
|
||||||
for _ in root.children() {
|
for _ in root.children() {
|
||||||
return Err(Error::ParseError("Unknown child in chatstate element."));
|
return Err(Error::ParseError("Unknown child in chatstate element."));
|
||||||
|
|
15
src/lib.rs
15
src/lib.rs
|
@ -12,3 +12,18 @@ pub mod jingle;
|
||||||
pub mod ping;
|
pub mod ping;
|
||||||
pub mod chatstates;
|
pub mod chatstates;
|
||||||
pub mod ibb;
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue