use std::fmt::Display;
#[derive(Clone)]
pub struct Author {
pub name: String,
pub email: Option<String>,
pub affiliation: Option<String>,
}
impl Display for Author {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.name)?;
if let Some(email) = &self.email {
write!(f, " <{}>", email)?;
}
if let Some(affiliation) = &self.affiliation {
write!(f, " ({})", affiliation)?;
}
Ok(())
}
}
impl<S: Into<String>> From<S> for Author {
fn from(name: S) -> Self {
Self {
name: name.into(),
email: None,
affiliation: None,
}
}
}