use serde::Serialize;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub enum Location {
Office, Remote, Holiday, NationalHoliday, OnSite, Mixed, }
impl Location {
pub fn code(&self) -> &str {
match self {
Location::Office => "O",
Location::Remote => "R",
Location::Holiday => "H",
Location::NationalHoliday => "N",
Location::OnSite => "C",
Location::Mixed => "M",
}
}
pub fn to_db_str(&self) -> &str {
self.code()
}
pub fn from_db_str(s: &str) -> Option<Self> {
match s {
"O" => Some(Location::Office),
"R" => Some(Location::Remote),
"H" => Some(Location::Holiday),
"N" => Some(Location::NationalHoliday),
"C" => Some(Location::OnSite),
"M" => Some(Location::Mixed),
_ => None,
}
}
pub fn from_code(code: &str) -> Option<Self> {
Location::from_db_str(&code.to_uppercase())
}
pub fn label(&self) -> &'static str {
match self {
Location::Office => "Office",
Location::Remote => "Remote",
Location::Holiday => "Holiday",
Location::NationalHoliday => "National Holiday",
Location::OnSite => "On-site (Client)",
Location::Mixed => "Mixed",
}
}
pub fn color(&self) -> &'static str {
match self {
Location::Office => "\x1b[34m", Location::Remote => "\x1b[36m", Location::Holiday => "\x1b[45;97;1m", Location::NationalHoliday => "\x1b[41;97;1m", Location::OnSite => "\x1b[33m", Location::Mixed => "\x1b[35m", }
}
}