Use slice patterns in EmailAddress::from_str()

This commit is contained in:
Alexander Krotov
2020-03-28 03:24:36 +03:00
committed by Alexander Krotov
parent 0327000f8d
commit cb92579461

View File

@@ -494,24 +494,25 @@ impl FromStr for EmailAddress {
ensure!(!input.is_empty(), "empty string is not valid"); ensure!(!input.is_empty(), "empty string is not valid");
let parts: Vec<&str> = input.rsplitn(2, '@').collect(); let parts: Vec<&str> = input.rsplitn(2, '@').collect();
ensure!(parts.len() > 1, "missing '@' character"); match &parts[..] {
let local = parts[1]; [domain, local] => {
let domain = parts[0]; ensure!(
!local.is_empty(),
"empty string is not valid for local part"
);
ensure!(domain.len() > 3, "domain is too short");
ensure!( let dot = domain.find('.');
!local.is_empty(), ensure!(dot.is_some(), "invalid domain");
"empty string is not valid for local part" ensure!(dot.unwrap() < domain.len() - 2, "invalid domain");
);
ensure!(domain.len() > 3, "domain is too short");
let dot = domain.find('.'); Ok(EmailAddress {
ensure!(dot.is_some(), "invalid domain"); local: (*local).to_string(),
ensure!(dot.unwrap() < domain.len() - 2, "invalid domain"); domain: (*domain).to_string(),
})
Ok(EmailAddress { }
local: local.to_string(), _ => bail!("missing '@' character"),
domain: domain.to_string(), }
})
} }
} }