use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum SpecialListingConditions {
Auction,
BankruptcyProperty,
HUDOwned,
InForeclosure,
NoticeOfDefault,
ProbateListing,
RealEstateOwned,
ShortSale,
Standard,
ThirdPartyApproval,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for SpecialListingConditions {
fn from_str(s: &str) -> SpecialListingConditions {
match s {
"Auction" => SpecialListingConditions::Auction,
"Bankruptcy Property" => SpecialListingConditions::BankruptcyProperty,
"HUD Owned" => SpecialListingConditions::HUDOwned,
"In Foreclosure" => SpecialListingConditions::InForeclosure,
"Notice Of Default" => SpecialListingConditions::NoticeOfDefault,
"Probate Listing" => SpecialListingConditions::ProbateListing,
"Real Estate Owned" => SpecialListingConditions::RealEstateOwned,
"Short Sale" => SpecialListingConditions::ShortSale,
"Standard" => SpecialListingConditions::Standard,
"Third Party Approval" => SpecialListingConditions::ThirdPartyApproval,
_ => SpecialListingConditions::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> SpecialListingConditions {
match s.as_ref() {
"Auction" => SpecialListingConditions::Auction,
"Bankruptcy Property" => SpecialListingConditions::BankruptcyProperty,
"HUD Owned" => SpecialListingConditions::HUDOwned,
"In Foreclosure" => SpecialListingConditions::InForeclosure,
"Notice Of Default" => SpecialListingConditions::NoticeOfDefault,
"Probate Listing" => SpecialListingConditions::ProbateListing,
"Real Estate Owned" => SpecialListingConditions::RealEstateOwned,
"Short Sale" => SpecialListingConditions::ShortSale,
"Standard" => SpecialListingConditions::Standard,
"Third Party Approval" => SpecialListingConditions::ThirdPartyApproval,
_ => SpecialListingConditions::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
SpecialListingConditions::Auction => "Auction",
SpecialListingConditions::BankruptcyProperty => "Bankruptcy Property",
SpecialListingConditions::HUDOwned => "HUD Owned",
SpecialListingConditions::InForeclosure => "In Foreclosure",
SpecialListingConditions::NoticeOfDefault => "Notice Of Default",
SpecialListingConditions::ProbateListing => "Probate Listing",
SpecialListingConditions::RealEstateOwned => "Real Estate Owned",
SpecialListingConditions::ShortSale => "Short Sale",
SpecialListingConditions::Standard => "Standard",
SpecialListingConditions::ThirdPartyApproval => "Third Party Approval",
SpecialListingConditions::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
SpecialListingConditions::Auction => "Auction".into(),
SpecialListingConditions::BankruptcyProperty => "Bankruptcy Property".into(),
SpecialListingConditions::HUDOwned => "HUD Owned".into(),
SpecialListingConditions::InForeclosure => "In Foreclosure".into(),
SpecialListingConditions::NoticeOfDefault => "Notice Of Default".into(),
SpecialListingConditions::ProbateListing => "Probate Listing".into(),
SpecialListingConditions::RealEstateOwned => "Real Estate Owned".into(),
SpecialListingConditions::ShortSale => "Short Sale".into(),
SpecialListingConditions::Standard => "Standard".into(),
SpecialListingConditions::ThirdPartyApproval => "Third Party Approval".into(),
SpecialListingConditions::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
SpecialListingConditions::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for SpecialListingConditions {
fn from(s: String) -> SpecialListingConditions {
match s.as_ref() {
"Auction" => SpecialListingConditions::Auction,
"Bankruptcy Property" => SpecialListingConditions::BankruptcyProperty,
"HUD Owned" => SpecialListingConditions::HUDOwned,
"In Foreclosure" => SpecialListingConditions::InForeclosure,
"Notice Of Default" => SpecialListingConditions::NoticeOfDefault,
"Probate Listing" => SpecialListingConditions::ProbateListing,
"Real Estate Owned" => SpecialListingConditions::RealEstateOwned,
"Short Sale" => SpecialListingConditions::ShortSale,
"Standard" => SpecialListingConditions::Standard,
"Third Party Approval" => SpecialListingConditions::ThirdPartyApproval,
_ => SpecialListingConditions::OpenEnumeration(s),
}
}
}
impl From<&str> for SpecialListingConditions {
fn from(s: &str) -> SpecialListingConditions {
match s {
"Auction" => SpecialListingConditions::Auction,
"Bankruptcy Property" => SpecialListingConditions::BankruptcyProperty,
"HUD Owned" => SpecialListingConditions::HUDOwned,
"In Foreclosure" => SpecialListingConditions::InForeclosure,
"Notice Of Default" => SpecialListingConditions::NoticeOfDefault,
"Probate Listing" => SpecialListingConditions::ProbateListing,
"Real Estate Owned" => SpecialListingConditions::RealEstateOwned,
"Short Sale" => SpecialListingConditions::ShortSale,
"Standard" => SpecialListingConditions::Standard,
"Third Party Approval" => SpecialListingConditions::ThirdPartyApproval,
_ => SpecialListingConditions::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a SpecialListingConditions> for &'a str {
fn from(s: &'a SpecialListingConditions) -> &'a str {
match s {
SpecialListingConditions::Auction => "Auction",
SpecialListingConditions::BankruptcyProperty => "Bankruptcy Property",
SpecialListingConditions::HUDOwned => "HUD Owned",
SpecialListingConditions::InForeclosure => "In Foreclosure",
SpecialListingConditions::NoticeOfDefault => "Notice Of Default",
SpecialListingConditions::ProbateListing => "Probate Listing",
SpecialListingConditions::RealEstateOwned => "Real Estate Owned",
SpecialListingConditions::ShortSale => "Short Sale",
SpecialListingConditions::Standard => "Standard",
SpecialListingConditions::ThirdPartyApproval => "Third Party Approval",
SpecialListingConditions::OpenEnumeration(s) => s,
}
}
}
impl Serialize for SpecialListingConditions {
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 SpecialListingConditions {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}