From cbfada3e4ae2490fbe6d15134671cb3834c96f08 Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Sun, 23 Aug 2020 21:31:51 +0300 Subject: [PATCH] Implement Default and FromStr for MozConfigTag --- src/configure/auto_mozilla.rs | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/configure/auto_mozilla.rs b/src/configure/auto_mozilla.rs index 703ed5380..b4c7049c8 100644 --- a/src/configure/auto_mozilla.rs +++ b/src/configure/auto_mozilla.rs @@ -4,6 +4,7 @@ use quick_xml::events::{BytesStart, Event}; use std::io::BufRead; +use std::str::FromStr; use crate::context::Context; use crate::login_param::LoginParam; @@ -36,6 +37,26 @@ enum MozConfigTag { Username, } +impl Default for MozConfigTag { + fn default() -> Self { + Self::Undefined + } +} + +impl FromStr for MozConfigTag { + type Err = (); + + fn from_str(s: &str) -> Result { + match s.trim().to_lowercase().as_ref() { + "hostname" => Ok(MozConfigTag::Hostname), + "port" => Ok(MozConfigTag::Port), + "sockettype" => Ok(MozConfigTag::Sockettype), + "username" => Ok(MozConfigTag::Username), + _ => Err(()), + } + } +} + /// Parses a single IncomingServer or OutgoingServer section. fn parse_server( reader: &mut quick_xml::Reader, @@ -70,17 +91,9 @@ fn parse_server( loop { match reader.read_event(&mut buf)? { Event::Start(ref event) => { - let tag = String::from_utf8_lossy(event.name()).trim().to_lowercase(); - - if tag == "hostname" { - tag_config = MozConfigTag::Hostname; - } else if tag == "port" { - tag_config = MozConfigTag::Port; - } else if tag == "sockettype" { - tag_config = MozConfigTag::Sockettype; - } else if tag == "username" { - tag_config = MozConfigTag::Username; - } + tag_config = String::from_utf8_lossy(event.name()) + .parse() + .unwrap_or_default(); } Event::End(ref event) => { let tag = String::from_utf8_lossy(event.name()).trim().to_lowercase();