Implement Default and FromStr for MozConfigTag

This commit is contained in:
Alexander Krotov
2020-08-23 21:31:51 +03:00
committed by link2xt
parent c19e35b68d
commit cbfada3e4a

View File

@@ -4,6 +4,7 @@
use quick_xml::events::{BytesStart, Event}; use quick_xml::events::{BytesStart, Event};
use std::io::BufRead; use std::io::BufRead;
use std::str::FromStr;
use crate::context::Context; use crate::context::Context;
use crate::login_param::LoginParam; use crate::login_param::LoginParam;
@@ -36,6 +37,26 @@ enum MozConfigTag {
Username, Username,
} }
impl Default for MozConfigTag {
fn default() -> Self {
Self::Undefined
}
}
impl FromStr for MozConfigTag {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
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. /// Parses a single IncomingServer or OutgoingServer section.
fn parse_server<B: BufRead>( fn parse_server<B: BufRead>(
reader: &mut quick_xml::Reader<B>, reader: &mut quick_xml::Reader<B>,
@@ -70,17 +91,9 @@ fn parse_server<B: BufRead>(
loop { loop {
match reader.read_event(&mut buf)? { match reader.read_event(&mut buf)? {
Event::Start(ref event) => { Event::Start(ref event) => {
let tag = String::from_utf8_lossy(event.name()).trim().to_lowercase(); tag_config = String::from_utf8_lossy(event.name())
.parse()
if tag == "hostname" { .unwrap_or_default();
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;
}
} }
Event::End(ref event) => { Event::End(ref event) => {
let tag = String::from_utf8_lossy(event.name()).trim().to_lowercase(); let tag = String::from_utf8_lossy(event.name()).trim().to_lowercase();