From 13e85078487476a6732954248a94a69cda8fb29a Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Sun, 25 Jun 2017 19:55:55 +0100 Subject: [PATCH] chatstates: Improve parsing. --- src/chatstates.rs | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/chatstates.rs b/src/chatstates.rs index 54f0aefe..47df01e0 100644 --- a/src/chatstates.rs +++ b/src/chatstates.rs @@ -25,25 +25,23 @@ impl TryFrom for ChatState { type Error = Error; fn try_from(elem: Element) -> Result { + 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.")), + }) } }