pub enum LossyUsername { Username(String), NoUsername(String, String), Unknown, } impl LossyUsername { pub fn from_user_ref(from: &paperplane::types::User) -> Self { if from.username.len() > 0 { LossyUsername::Username(from.username.clone()) } else { LossyUsername::NoUsername(from.first_name.clone(), from.last_name.clone()) } } } impl std::fmt::Display for LossyUsername { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { LossyUsername::Username(username) => write!(f, "@{}", username), LossyUsername::NoUsername(first, last) => { if last.len() > 0 { write!(f, "{} {}", first, last) } else { write!(f, "{}", first) } } LossyUsername::Unknown => write!(f, "unknown"), } } } pub enum LossyChatTitle { Title(String), Unknown, } impl LossyChatTitle { pub fn from_chat_ref(from: &paperplane::types::Chat) -> Self { Self::Title(from.title.clone()) } } impl std::fmt::Display for LossyChatTitle { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { LossyChatTitle::Title(title) => write!(f, "{}", title), LossyChatTitle::Unknown => write!(f, "unknown"), } } }