pub fn xml_escape(s: &str) -> String {
s.replace('&', "&")
.replace('<', "<")
.replace('>', ">")
.replace('"', """)
.replace('\'', "'")
}
pub fn parse_author(s: &str) -> (&str, &str) {
if let Some(start) = s.find('<')
&& let Some(end) = s.find('>')
{
let name = s[..start].trim();
let email = &s[start + 1..end];
return (name, email);
}
(s.trim(), "")
}
pub(crate) fn capitalize_first(s: &str) -> String {
let mut chars = s.chars();
match chars.next() {
None => String::new(),
Some(c) => c.to_uppercase().to_string() + chars.as_str(),
}
}