use std::fmt::{Display, Formatter, Result};
#[derive(Debug, PartialEq, Eq)]
pub enum Service<'a> {
#[allow(non_camel_case_types)]
iMessage,
SMS,
RCS,
Satellite,
Other(&'a str),
Unknown,
}
impl<'a> Service<'a> {
#[must_use]
pub fn from_name(service: Option<&'a str>) -> Self {
if let Some(service_name) = service {
return match service_name.trim() {
"iMessage" => Service::iMessage,
"iMessageLite" => Service::Satellite,
"SMS" => Service::SMS,
"rcs" | "RCS" => Service::RCS,
service_name => Service::Other(service_name),
};
}
Service::Unknown
}
}
impl Display for Service<'_> {
fn fmt(&self, fmt: &mut Formatter<'_>) -> Result {
match self {
Service::iMessage => write!(fmt, "iMessage"),
Service::SMS => write!(fmt, "SMS"),
Service::RCS => write!(fmt, "RCS"),
Service::Satellite => write!(fmt, "Satellite"),
Service::Other(other) => write!(fmt, "{other}"),
Service::Unknown => write!(fmt, "Unknown"),
}
}
}