use std::hash::{Hash, Hasher};
#[derive(Clone, Debug, Default, Eq, Ord, PartialOrd)]
pub struct Address {
pub name: Option<String>,
pub addr: String,
}
impl Hash for Address {
fn hash<H: Hasher>(&self, state: &mut H) {
self.addr.hash(state);
}
}
impl PartialEq for Address {
fn eq(&self, other: &Self) -> bool {
self.addr == other.addr
}
}
impl ToString for Address {
fn to_string(&self) -> String {
match &self.name {
Some(name) => format!("{name} <{}>", self.addr),
None => self.addr.clone(),
}
}
}
impl Address {
pub fn new(name: Option<impl ToString>, address: impl ToString) -> Self {
Self {
name: name.map(|name| name.to_string()),
addr: address.to_string(),
}
}
pub fn new_nameless(address: impl ToString) -> Self {
Self::new(Option::<String>::None, address)
}
}