use serde::Serialize;
use crate::raw::RawProperty;
pub const PREFIXES: &[&str] = &["X-MICROSOFT-CDO-", "X-MICROSOFT-"];
pub fn owns_property(name: &str) -> bool {
super::matches_prefixes(name, PREFIXES)
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum MsBusyStatus {
Free,
Tentative,
Busy,
Oof,
#[serde(rename = "working")]
WorkingElsewhere,
}
impl MsBusyStatus {
pub fn transp(self) -> &'static str {
match self {
MsBusyStatus::Free => "TRANSPARENT",
_ => "OPAQUE",
}
}
pub fn cdo_value(self) -> &'static str {
match self {
MsBusyStatus::Free => "FREE",
MsBusyStatus::Tentative => "TENTATIVE",
MsBusyStatus::Busy => "BUSY",
MsBusyStatus::Oof => "OOF",
MsBusyStatus::WorkingElsewhere => "WORKINGELSEWHERE",
}
}
pub fn from_cdo(s: &str) -> Option<Self> {
match s {
"FREE" => Some(MsBusyStatus::Free),
"TENTATIVE" => Some(MsBusyStatus::Tentative),
"BUSY" => Some(MsBusyStatus::Busy),
"OOF" => Some(MsBusyStatus::Oof),
"WORKINGELSEWHERE" => Some(MsBusyStatus::WorkingElsewhere),
_ => None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)]
pub struct EventExtensions {
#[serde(skip_serializing_if = "Option::is_none")]
pub busystatus: Option<MsBusyStatus>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub unrecognized: Vec<RawProperty>,
}