use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum ObjectIdType {
ListingId,
ListingKey,
ListingKeyNumeric,
OpenHouseId,
OpenHouseKey,
OpenHouseKeyNumeric,
ParcelNumber,
PUID,
SavedSearchKey,
SavedSearchKeyNumeric,
Unique,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for ObjectIdType {
fn from_str(s: &str) -> ObjectIdType {
match s {
"ListingId" => ObjectIdType::ListingId,
"ListingKey" => ObjectIdType::ListingKey,
"ListingKeyNumeric" => ObjectIdType::ListingKeyNumeric,
"OpenHouseId" => ObjectIdType::OpenHouseId,
"OpenHouseKey" => ObjectIdType::OpenHouseKey,
"OpenHouseKeyNumeric" => ObjectIdType::OpenHouseKeyNumeric,
"ParcelNumber" => ObjectIdType::ParcelNumber,
"PUID" => ObjectIdType::PUID,
"SavedSearchKey" => ObjectIdType::SavedSearchKey,
"SavedSearchKeyNumeric" => ObjectIdType::SavedSearchKeyNumeric,
"Unique" => ObjectIdType::Unique,
_ => ObjectIdType::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> ObjectIdType {
match s.as_ref() {
"ListingId" => ObjectIdType::ListingId,
"ListingKey" => ObjectIdType::ListingKey,
"ListingKeyNumeric" => ObjectIdType::ListingKeyNumeric,
"OpenHouseId" => ObjectIdType::OpenHouseId,
"OpenHouseKey" => ObjectIdType::OpenHouseKey,
"OpenHouseKeyNumeric" => ObjectIdType::OpenHouseKeyNumeric,
"ParcelNumber" => ObjectIdType::ParcelNumber,
"PUID" => ObjectIdType::PUID,
"SavedSearchKey" => ObjectIdType::SavedSearchKey,
"SavedSearchKeyNumeric" => ObjectIdType::SavedSearchKeyNumeric,
"Unique" => ObjectIdType::Unique,
_ => ObjectIdType::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
ObjectIdType::ListingId => "ListingId",
ObjectIdType::ListingKey => "ListingKey",
ObjectIdType::ListingKeyNumeric => "ListingKeyNumeric",
ObjectIdType::OpenHouseId => "OpenHouseId",
ObjectIdType::OpenHouseKey => "OpenHouseKey",
ObjectIdType::OpenHouseKeyNumeric => "OpenHouseKeyNumeric",
ObjectIdType::ParcelNumber => "ParcelNumber",
ObjectIdType::PUID => "PUID",
ObjectIdType::SavedSearchKey => "SavedSearchKey",
ObjectIdType::SavedSearchKeyNumeric => "SavedSearchKeyNumeric",
ObjectIdType::Unique => "Unique",
ObjectIdType::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
ObjectIdType::ListingId => "ListingId".into(),
ObjectIdType::ListingKey => "ListingKey".into(),
ObjectIdType::ListingKeyNumeric => "ListingKeyNumeric".into(),
ObjectIdType::OpenHouseId => "OpenHouseId".into(),
ObjectIdType::OpenHouseKey => "OpenHouseKey".into(),
ObjectIdType::OpenHouseKeyNumeric => "OpenHouseKeyNumeric".into(),
ObjectIdType::ParcelNumber => "ParcelNumber".into(),
ObjectIdType::PUID => "PUID".into(),
ObjectIdType::SavedSearchKey => "SavedSearchKey".into(),
ObjectIdType::SavedSearchKeyNumeric => "SavedSearchKeyNumeric".into(),
ObjectIdType::Unique => "Unique".into(),
ObjectIdType::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
ObjectIdType::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for ObjectIdType {
fn from(s: String) -> ObjectIdType {
match s.as_ref() {
"ListingId" => ObjectIdType::ListingId,
"ListingKey" => ObjectIdType::ListingKey,
"ListingKeyNumeric" => ObjectIdType::ListingKeyNumeric,
"OpenHouseId" => ObjectIdType::OpenHouseId,
"OpenHouseKey" => ObjectIdType::OpenHouseKey,
"OpenHouseKeyNumeric" => ObjectIdType::OpenHouseKeyNumeric,
"ParcelNumber" => ObjectIdType::ParcelNumber,
"PUID" => ObjectIdType::PUID,
"SavedSearchKey" => ObjectIdType::SavedSearchKey,
"SavedSearchKeyNumeric" => ObjectIdType::SavedSearchKeyNumeric,
"Unique" => ObjectIdType::Unique,
_ => ObjectIdType::OpenEnumeration(s),
}
}
}
impl From<&str> for ObjectIdType {
fn from(s: &str) -> ObjectIdType {
match s {
"ListingId" => ObjectIdType::ListingId,
"ListingKey" => ObjectIdType::ListingKey,
"ListingKeyNumeric" => ObjectIdType::ListingKeyNumeric,
"OpenHouseId" => ObjectIdType::OpenHouseId,
"OpenHouseKey" => ObjectIdType::OpenHouseKey,
"OpenHouseKeyNumeric" => ObjectIdType::OpenHouseKeyNumeric,
"ParcelNumber" => ObjectIdType::ParcelNumber,
"PUID" => ObjectIdType::PUID,
"SavedSearchKey" => ObjectIdType::SavedSearchKey,
"SavedSearchKeyNumeric" => ObjectIdType::SavedSearchKeyNumeric,
"Unique" => ObjectIdType::Unique,
_ => ObjectIdType::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a ObjectIdType> for &'a str {
fn from(s: &'a ObjectIdType) -> &'a str {
match s {
ObjectIdType::ListingId => "ListingId",
ObjectIdType::ListingKey => "ListingKey",
ObjectIdType::ListingKeyNumeric => "ListingKeyNumeric",
ObjectIdType::OpenHouseId => "OpenHouseId",
ObjectIdType::OpenHouseKey => "OpenHouseKey",
ObjectIdType::OpenHouseKeyNumeric => "OpenHouseKeyNumeric",
ObjectIdType::ParcelNumber => "ParcelNumber",
ObjectIdType::PUID => "PUID",
ObjectIdType::SavedSearchKey => "SavedSearchKey",
ObjectIdType::SavedSearchKeyNumeric => "SavedSearchKeyNumeric",
ObjectIdType::Unique => "Unique",
ObjectIdType::OpenEnumeration(s) => s,
}
}
}
impl Serialize for ObjectIdType {
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 ObjectIdType {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}