use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum StructureType {
Cabin,
Dock,
Duplex,
Flex,
HotelMotel,
House,
Industrial,
ManufacturedHouse,
MixedUse,
MultiFamily,
None,
Office,
Quadruplex,
Retail,
Townhouse,
Triplex,
Warehouse,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for StructureType {
fn from_str(s: &str) -> StructureType {
match s {
"Cabin" => StructureType::Cabin,
"Dock" => StructureType::Dock,
"Duplex" => StructureType::Duplex,
"Flex" => StructureType::Flex,
"Hotel/Motel" => StructureType::HotelMotel,
"House" => StructureType::House,
"Industrial" => StructureType::Industrial,
"Manufactured House" => StructureType::ManufacturedHouse,
"Mixed Use" => StructureType::MixedUse,
"Multi Family" => StructureType::MultiFamily,
"None" => StructureType::None,
"Office" => StructureType::Office,
"Quadruplex" => StructureType::Quadruplex,
"Retail" => StructureType::Retail,
"Townhouse" => StructureType::Townhouse,
"Triplex" => StructureType::Triplex,
"Warehouse" => StructureType::Warehouse,
_ => StructureType::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> StructureType {
match s.as_ref() {
"Cabin" => StructureType::Cabin,
"Dock" => StructureType::Dock,
"Duplex" => StructureType::Duplex,
"Flex" => StructureType::Flex,
"Hotel/Motel" => StructureType::HotelMotel,
"House" => StructureType::House,
"Industrial" => StructureType::Industrial,
"Manufactured House" => StructureType::ManufacturedHouse,
"Mixed Use" => StructureType::MixedUse,
"Multi Family" => StructureType::MultiFamily,
"None" => StructureType::None,
"Office" => StructureType::Office,
"Quadruplex" => StructureType::Quadruplex,
"Retail" => StructureType::Retail,
"Townhouse" => StructureType::Townhouse,
"Triplex" => StructureType::Triplex,
"Warehouse" => StructureType::Warehouse,
_ => StructureType::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
StructureType::Cabin => "Cabin",
StructureType::Dock => "Dock",
StructureType::Duplex => "Duplex",
StructureType::Flex => "Flex",
StructureType::HotelMotel => "Hotel/Motel",
StructureType::House => "House",
StructureType::Industrial => "Industrial",
StructureType::ManufacturedHouse => "Manufactured House",
StructureType::MixedUse => "Mixed Use",
StructureType::MultiFamily => "Multi Family",
StructureType::None => "None",
StructureType::Office => "Office",
StructureType::Quadruplex => "Quadruplex",
StructureType::Retail => "Retail",
StructureType::Townhouse => "Townhouse",
StructureType::Triplex => "Triplex",
StructureType::Warehouse => "Warehouse",
StructureType::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
StructureType::Cabin => "Cabin".into(),
StructureType::Dock => "Dock".into(),
StructureType::Duplex => "Duplex".into(),
StructureType::Flex => "Flex".into(),
StructureType::HotelMotel => "Hotel/Motel".into(),
StructureType::House => "House".into(),
StructureType::Industrial => "Industrial".into(),
StructureType::ManufacturedHouse => "Manufactured House".into(),
StructureType::MixedUse => "Mixed Use".into(),
StructureType::MultiFamily => "Multi Family".into(),
StructureType::None => "None".into(),
StructureType::Office => "Office".into(),
StructureType::Quadruplex => "Quadruplex".into(),
StructureType::Retail => "Retail".into(),
StructureType::Townhouse => "Townhouse".into(),
StructureType::Triplex => "Triplex".into(),
StructureType::Warehouse => "Warehouse".into(),
StructureType::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
StructureType::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for StructureType {
fn from(s: String) -> StructureType {
match s.as_ref() {
"Cabin" => StructureType::Cabin,
"Dock" => StructureType::Dock,
"Duplex" => StructureType::Duplex,
"Flex" => StructureType::Flex,
"Hotel/Motel" => StructureType::HotelMotel,
"House" => StructureType::House,
"Industrial" => StructureType::Industrial,
"Manufactured House" => StructureType::ManufacturedHouse,
"Mixed Use" => StructureType::MixedUse,
"Multi Family" => StructureType::MultiFamily,
"None" => StructureType::None,
"Office" => StructureType::Office,
"Quadruplex" => StructureType::Quadruplex,
"Retail" => StructureType::Retail,
"Townhouse" => StructureType::Townhouse,
"Triplex" => StructureType::Triplex,
"Warehouse" => StructureType::Warehouse,
_ => StructureType::OpenEnumeration(s),
}
}
}
impl From<&str> for StructureType {
fn from(s: &str) -> StructureType {
match s {
"Cabin" => StructureType::Cabin,
"Dock" => StructureType::Dock,
"Duplex" => StructureType::Duplex,
"Flex" => StructureType::Flex,
"Hotel/Motel" => StructureType::HotelMotel,
"House" => StructureType::House,
"Industrial" => StructureType::Industrial,
"Manufactured House" => StructureType::ManufacturedHouse,
"Mixed Use" => StructureType::MixedUse,
"Multi Family" => StructureType::MultiFamily,
"None" => StructureType::None,
"Office" => StructureType::Office,
"Quadruplex" => StructureType::Quadruplex,
"Retail" => StructureType::Retail,
"Townhouse" => StructureType::Townhouse,
"Triplex" => StructureType::Triplex,
"Warehouse" => StructureType::Warehouse,
_ => StructureType::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a StructureType> for &'a str {
fn from(s: &'a StructureType) -> &'a str {
match s {
StructureType::Cabin => "Cabin",
StructureType::Dock => "Dock",
StructureType::Duplex => "Duplex",
StructureType::Flex => "Flex",
StructureType::HotelMotel => "Hotel/Motel",
StructureType::House => "House",
StructureType::Industrial => "Industrial",
StructureType::ManufacturedHouse => "Manufactured House",
StructureType::MixedUse => "Mixed Use",
StructureType::MultiFamily => "Multi Family",
StructureType::None => "None",
StructureType::Office => "Office",
StructureType::Quadruplex => "Quadruplex",
StructureType::Retail => "Retail",
StructureType::Townhouse => "Townhouse",
StructureType::Triplex => "Triplex",
StructureType::Warehouse => "Warehouse",
StructureType::OpenEnumeration(s) => s,
}
}
}
impl Serialize for StructureType {
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 StructureType {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}