Add an attention parser.

Emmanuel Gil Peyrot created

Change summary

src/attention.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++
src/lib.rs       |  3 +++
src/ns.rs        |  3 +++
3 files changed, 50 insertions(+)

Detailed changes

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<Attention, Error> {
+    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 = "<attention xmlns='urn:xmpp:attention:0'/>".parse().unwrap();
+        attention::parse_attention(&elem).unwrap();
+    }
+
+    #[test]
+    fn test_invalid_child() {
+        let elem: Element = "<attention xmlns='urn:xmpp:attention:0'><coucou/></attention>".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.");
+    }
+}

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;
 

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