diff --git a/src/attention.rs b/src/attention.rs new file mode 100644 index 0000000..2438dc6 --- /dev/null +++ b/src/attention.rs @@ -0,0 +1,44 @@ +use minidom::Element; + +use error::Error; + +use ns; + +#[derive(Debug, Clone)] +pub enum Attention { + Attention, +} + +pub fn parse_attention(root: &Element) -> Result { + if !root.is("attention", ns::ATTENTION) { + return Err(Error::ParseError("This is not an attention element.")); + } + for _ in root.children() { + return Err(Error::ParseError("Unknown child in attention element.")); + } + Ok(Attention::Attention) +} + +#[cfg(test)] +mod tests { + use minidom::Element; + use error::Error; + use attention; + + #[test] + fn test_simple() { + let elem: Element = "".parse().unwrap(); + attention::parse_attention(&elem).unwrap(); + } + + #[test] + fn test_invalid_child() { + let elem: Element = "".parse().unwrap(); + let error = attention::parse_attention(&elem).unwrap_err(); + let message = match error { + Error::ParseError(string) => string, + _ => panic!(), + }; + assert_eq!(message, "Unknown child in attention element."); + } +} diff --git a/src/lib.rs b/src/lib.rs index dc8fcdb..2ba49d6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -42,6 +42,9 @@ pub mod ping; /// XEP-0221: Data Forms Media Element pub mod media_element; +/// XEP-0224: Attention +pub mod attention; + /// XEP-0390: Entity Capabilities 2.0 pub mod ecaps2; diff --git a/src/ns.rs b/src/ns.rs index 5bcf6d1..2b5ba3f 100644 --- a/src/ns.rs +++ b/src/ns.rs @@ -25,6 +25,9 @@ pub const PING: &'static str = "urn:xmpp:ping"; /// XEP-0221: Data Forms Media Element pub const MEDIA_ELEMENT: &'static str = "urn:xmpp:media-element"; +/// XEP-0224: Attention +pub const ATTENTION: &'static str = "urn:xmpp:attention:0"; + /// XEP-0390: Entity Capabilities 2.0 pub const ECAPS2: &'static str = "urn:xmpp:caps"; /// XEP-0390: Entity Capabilities 2.0