use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum StandardStatus {
Active,
ActiveUnderContract,
Canceled,
Closed,
ComingSoon,
Delete,
Expired,
Hold,
Incomplete,
Pending,
Withdrawn,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for StandardStatus {
fn from_str(s: &str) -> StandardStatus {
match s {
"Active" => StandardStatus::Active,
"Active Under Contract" => StandardStatus::ActiveUnderContract,
"Canceled" => StandardStatus::Canceled,
"Closed" => StandardStatus::Closed,
"Coming Soon" => StandardStatus::ComingSoon,
"Delete" => StandardStatus::Delete,
"Expired" => StandardStatus::Expired,
"Hold" => StandardStatus::Hold,
"Incomplete" => StandardStatus::Incomplete,
"Pending" => StandardStatus::Pending,
"Withdrawn" => StandardStatus::Withdrawn,
_ => StandardStatus::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> StandardStatus {
match s.as_ref() {
"Active" => StandardStatus::Active,
"Active Under Contract" => StandardStatus::ActiveUnderContract,
"Canceled" => StandardStatus::Canceled,
"Closed" => StandardStatus::Closed,
"Coming Soon" => StandardStatus::ComingSoon,
"Delete" => StandardStatus::Delete,
"Expired" => StandardStatus::Expired,
"Hold" => StandardStatus::Hold,
"Incomplete" => StandardStatus::Incomplete,
"Pending" => StandardStatus::Pending,
"Withdrawn" => StandardStatus::Withdrawn,
_ => StandardStatus::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
StandardStatus::Active => "Active",
StandardStatus::ActiveUnderContract => "Active Under Contract",
StandardStatus::Canceled => "Canceled",
StandardStatus::Closed => "Closed",
StandardStatus::ComingSoon => "Coming Soon",
StandardStatus::Delete => "Delete",
StandardStatus::Expired => "Expired",
StandardStatus::Hold => "Hold",
StandardStatus::Incomplete => "Incomplete",
StandardStatus::Pending => "Pending",
StandardStatus::Withdrawn => "Withdrawn",
StandardStatus::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
StandardStatus::Active => "Active".into(),
StandardStatus::ActiveUnderContract => "Active Under Contract".into(),
StandardStatus::Canceled => "Canceled".into(),
StandardStatus::Closed => "Closed".into(),
StandardStatus::ComingSoon => "Coming Soon".into(),
StandardStatus::Delete => "Delete".into(),
StandardStatus::Expired => "Expired".into(),
StandardStatus::Hold => "Hold".into(),
StandardStatus::Incomplete => "Incomplete".into(),
StandardStatus::Pending => "Pending".into(),
StandardStatus::Withdrawn => "Withdrawn".into(),
StandardStatus::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
StandardStatus::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for StandardStatus {
fn from(s: String) -> StandardStatus {
match s.as_ref() {
"Active" => StandardStatus::Active,
"Active Under Contract" => StandardStatus::ActiveUnderContract,
"Canceled" => StandardStatus::Canceled,
"Closed" => StandardStatus::Closed,
"Coming Soon" => StandardStatus::ComingSoon,
"Delete" => StandardStatus::Delete,
"Expired" => StandardStatus::Expired,
"Hold" => StandardStatus::Hold,
"Incomplete" => StandardStatus::Incomplete,
"Pending" => StandardStatus::Pending,
"Withdrawn" => StandardStatus::Withdrawn,
_ => StandardStatus::OpenEnumeration(s),
}
}
}
impl From<&str> for StandardStatus {
fn from(s: &str) -> StandardStatus {
match s {
"Active" => StandardStatus::Active,
"Active Under Contract" => StandardStatus::ActiveUnderContract,
"Canceled" => StandardStatus::Canceled,
"Closed" => StandardStatus::Closed,
"Coming Soon" => StandardStatus::ComingSoon,
"Delete" => StandardStatus::Delete,
"Expired" => StandardStatus::Expired,
"Hold" => StandardStatus::Hold,
"Incomplete" => StandardStatus::Incomplete,
"Pending" => StandardStatus::Pending,
"Withdrawn" => StandardStatus::Withdrawn,
_ => StandardStatus::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a StandardStatus> for &'a str {
fn from(s: &'a StandardStatus) -> &'a str {
match s {
StandardStatus::Active => "Active",
StandardStatus::ActiveUnderContract => "Active Under Contract",
StandardStatus::Canceled => "Canceled",
StandardStatus::Closed => "Closed",
StandardStatus::ComingSoon => "Coming Soon",
StandardStatus::Delete => "Delete",
StandardStatus::Expired => "Expired",
StandardStatus::Hold => "Hold",
StandardStatus::Incomplete => "Incomplete",
StandardStatus::Pending => "Pending",
StandardStatus::Withdrawn => "Withdrawn",
StandardStatus::OpenEnumeration(s) => s,
}
}
}
impl Serialize for StandardStatus {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(self.into())
}
}
impl<'de> Deserialize<'de> for StandardStatus {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}