chatstates: Improve parsing.

Emmanuel Gil Peyrot created

Change summary

src/chatstates.rs | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)

Detailed changes

src/chatstates.rs 🔗

@@ -25,25 +25,23 @@ impl TryFrom<Element> for ChatState {
     type Error = Error;
 
     fn try_from(elem: Element) -> Result<ChatState, Error> {
+        if elem.ns() != Some(ns::CHATSTATES) {
+            return Err(Error::ParseError("This is not a chatstate element."));
+        }
         for _ in elem.children() {
             return Err(Error::ParseError("Unknown child in chatstate element."));
         }
         for _ in elem.attrs() {
             return Err(Error::ParseError("Unknown attribute in chatstate element."));
         }
-        if elem.is("active", ns::CHATSTATES) {
-            Ok(ChatState::Active)
-        } else if elem.is("composing", ns::CHATSTATES) {
-            Ok(ChatState::Composing)
-        } else if elem.is("gone", ns::CHATSTATES) {
-            Ok(ChatState::Gone)
-        } else if elem.is("inactive", ns::CHATSTATES) {
-            Ok(ChatState::Inactive)
-        } else if elem.is("paused", ns::CHATSTATES) {
-            Ok(ChatState::Paused)
-        } else {
-            Err(Error::ParseError("This is not a chatstate element."))
-        }
+        Ok(match elem.name() {
+            "active" => ChatState::Active,
+            "composing" => ChatState::Composing,
+            "gone" => ChatState::Gone,
+            "inactive" => ChatState::Inactive,
+            "paused" => ChatState::Paused,
+            _ => return Err(Error::ParseError("This is not a chatstate element.")),
+        })
     }
 }