use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum Utilities {
CableAvailable,
CableConnected,
CableNotAvailable,
ElectricityAvailable,
ElectricityConnected,
ElectricityNotAvailable,
NaturalGasAvailable,
NaturalGasConnected,
NaturalGasNotAvailable,
None,
Other,
PhoneAvailable,
PhoneConnected,
PhoneNotAvailable,
Propane,
SeeRemarks,
SewerAvailable,
SewerConnected,
SewerNotAvailable,
UndergroundUtilities,
WaterAvailable,
WaterConnected,
WaterNotAvailable,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for Utilities {
fn from_str(s: &str) -> Utilities {
match s {
"Cable Available" => Utilities::CableAvailable,
"Cable Connected" => Utilities::CableConnected,
"Cable Not Available" => Utilities::CableNotAvailable,
"Electricity Available" => Utilities::ElectricityAvailable,
"Electricity Connected" => Utilities::ElectricityConnected,
"Electricity Not Available" => Utilities::ElectricityNotAvailable,
"Natural Gas Available" => Utilities::NaturalGasAvailable,
"Natural Gas Connected" => Utilities::NaturalGasConnected,
"Natural Gas Not Available" => Utilities::NaturalGasNotAvailable,
"None" => Utilities::None,
"Other" => Utilities::Other,
"Phone Available" => Utilities::PhoneAvailable,
"Phone Connected" => Utilities::PhoneConnected,
"Phone Not Available" => Utilities::PhoneNotAvailable,
"Propane" => Utilities::Propane,
"See Remarks" => Utilities::SeeRemarks,
"Sewer Available" => Utilities::SewerAvailable,
"Sewer Connected" => Utilities::SewerConnected,
"Sewer Not Available" => Utilities::SewerNotAvailable,
"Underground Utilities" => Utilities::UndergroundUtilities,
"Water Available" => Utilities::WaterAvailable,
"Water Connected" => Utilities::WaterConnected,
"Water Not Available" => Utilities::WaterNotAvailable,
_ => Utilities::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> Utilities {
match s.as_ref() {
"Cable Available" => Utilities::CableAvailable,
"Cable Connected" => Utilities::CableConnected,
"Cable Not Available" => Utilities::CableNotAvailable,
"Electricity Available" => Utilities::ElectricityAvailable,
"Electricity Connected" => Utilities::ElectricityConnected,
"Electricity Not Available" => Utilities::ElectricityNotAvailable,
"Natural Gas Available" => Utilities::NaturalGasAvailable,
"Natural Gas Connected" => Utilities::NaturalGasConnected,
"Natural Gas Not Available" => Utilities::NaturalGasNotAvailable,
"None" => Utilities::None,
"Other" => Utilities::Other,
"Phone Available" => Utilities::PhoneAvailable,
"Phone Connected" => Utilities::PhoneConnected,
"Phone Not Available" => Utilities::PhoneNotAvailable,
"Propane" => Utilities::Propane,
"See Remarks" => Utilities::SeeRemarks,
"Sewer Available" => Utilities::SewerAvailable,
"Sewer Connected" => Utilities::SewerConnected,
"Sewer Not Available" => Utilities::SewerNotAvailable,
"Underground Utilities" => Utilities::UndergroundUtilities,
"Water Available" => Utilities::WaterAvailable,
"Water Connected" => Utilities::WaterConnected,
"Water Not Available" => Utilities::WaterNotAvailable,
_ => Utilities::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
Utilities::CableAvailable => "Cable Available",
Utilities::CableConnected => "Cable Connected",
Utilities::CableNotAvailable => "Cable Not Available",
Utilities::ElectricityAvailable => "Electricity Available",
Utilities::ElectricityConnected => "Electricity Connected",
Utilities::ElectricityNotAvailable => "Electricity Not Available",
Utilities::NaturalGasAvailable => "Natural Gas Available",
Utilities::NaturalGasConnected => "Natural Gas Connected",
Utilities::NaturalGasNotAvailable => "Natural Gas Not Available",
Utilities::None => "None",
Utilities::Other => "Other",
Utilities::PhoneAvailable => "Phone Available",
Utilities::PhoneConnected => "Phone Connected",
Utilities::PhoneNotAvailable => "Phone Not Available",
Utilities::Propane => "Propane",
Utilities::SeeRemarks => "See Remarks",
Utilities::SewerAvailable => "Sewer Available",
Utilities::SewerConnected => "Sewer Connected",
Utilities::SewerNotAvailable => "Sewer Not Available",
Utilities::UndergroundUtilities => "Underground Utilities",
Utilities::WaterAvailable => "Water Available",
Utilities::WaterConnected => "Water Connected",
Utilities::WaterNotAvailable => "Water Not Available",
Utilities::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
Utilities::CableAvailable => "Cable Available".into(),
Utilities::CableConnected => "Cable Connected".into(),
Utilities::CableNotAvailable => "Cable Not Available".into(),
Utilities::ElectricityAvailable => "Electricity Available".into(),
Utilities::ElectricityConnected => "Electricity Connected".into(),
Utilities::ElectricityNotAvailable => "Electricity Not Available".into(),
Utilities::NaturalGasAvailable => "Natural Gas Available".into(),
Utilities::NaturalGasConnected => "Natural Gas Connected".into(),
Utilities::NaturalGasNotAvailable => "Natural Gas Not Available".into(),
Utilities::None => "None".into(),
Utilities::Other => "Other".into(),
Utilities::PhoneAvailable => "Phone Available".into(),
Utilities::PhoneConnected => "Phone Connected".into(),
Utilities::PhoneNotAvailable => "Phone Not Available".into(),
Utilities::Propane => "Propane".into(),
Utilities::SeeRemarks => "See Remarks".into(),
Utilities::SewerAvailable => "Sewer Available".into(),
Utilities::SewerConnected => "Sewer Connected".into(),
Utilities::SewerNotAvailable => "Sewer Not Available".into(),
Utilities::UndergroundUtilities => "Underground Utilities".into(),
Utilities::WaterAvailable => "Water Available".into(),
Utilities::WaterConnected => "Water Connected".into(),
Utilities::WaterNotAvailable => "Water Not Available".into(),
Utilities::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
Utilities::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for Utilities {
fn from(s: String) -> Utilities {
match s.as_ref() {
"Cable Available" => Utilities::CableAvailable,
"Cable Connected" => Utilities::CableConnected,
"Cable Not Available" => Utilities::CableNotAvailable,
"Electricity Available" => Utilities::ElectricityAvailable,
"Electricity Connected" => Utilities::ElectricityConnected,
"Electricity Not Available" => Utilities::ElectricityNotAvailable,
"Natural Gas Available" => Utilities::NaturalGasAvailable,
"Natural Gas Connected" => Utilities::NaturalGasConnected,
"Natural Gas Not Available" => Utilities::NaturalGasNotAvailable,
"None" => Utilities::None,
"Other" => Utilities::Other,
"Phone Available" => Utilities::PhoneAvailable,
"Phone Connected" => Utilities::PhoneConnected,
"Phone Not Available" => Utilities::PhoneNotAvailable,
"Propane" => Utilities::Propane,
"See Remarks" => Utilities::SeeRemarks,
"Sewer Available" => Utilities::SewerAvailable,
"Sewer Connected" => Utilities::SewerConnected,
"Sewer Not Available" => Utilities::SewerNotAvailable,
"Underground Utilities" => Utilities::UndergroundUtilities,
"Water Available" => Utilities::WaterAvailable,
"Water Connected" => Utilities::WaterConnected,
"Water Not Available" => Utilities::WaterNotAvailable,
_ => Utilities::OpenEnumeration(s),
}
}
}
impl From<&str> for Utilities {
fn from(s: &str) -> Utilities {
match s {
"Cable Available" => Utilities::CableAvailable,
"Cable Connected" => Utilities::CableConnected,
"Cable Not Available" => Utilities::CableNotAvailable,
"Electricity Available" => Utilities::ElectricityAvailable,
"Electricity Connected" => Utilities::ElectricityConnected,
"Electricity Not Available" => Utilities::ElectricityNotAvailable,
"Natural Gas Available" => Utilities::NaturalGasAvailable,
"Natural Gas Connected" => Utilities::NaturalGasConnected,
"Natural Gas Not Available" => Utilities::NaturalGasNotAvailable,
"None" => Utilities::None,
"Other" => Utilities::Other,
"Phone Available" => Utilities::PhoneAvailable,
"Phone Connected" => Utilities::PhoneConnected,
"Phone Not Available" => Utilities::PhoneNotAvailable,
"Propane" => Utilities::Propane,
"See Remarks" => Utilities::SeeRemarks,
"Sewer Available" => Utilities::SewerAvailable,
"Sewer Connected" => Utilities::SewerConnected,
"Sewer Not Available" => Utilities::SewerNotAvailable,
"Underground Utilities" => Utilities::UndergroundUtilities,
"Water Available" => Utilities::WaterAvailable,
"Water Connected" => Utilities::WaterConnected,
"Water Not Available" => Utilities::WaterNotAvailable,
_ => Utilities::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a Utilities> for &'a str {
fn from(s: &'a Utilities) -> &'a str {
match s {
Utilities::CableAvailable => "Cable Available",
Utilities::CableConnected => "Cable Connected",
Utilities::CableNotAvailable => "Cable Not Available",
Utilities::ElectricityAvailable => "Electricity Available",
Utilities::ElectricityConnected => "Electricity Connected",
Utilities::ElectricityNotAvailable => "Electricity Not Available",
Utilities::NaturalGasAvailable => "Natural Gas Available",
Utilities::NaturalGasConnected => "Natural Gas Connected",
Utilities::NaturalGasNotAvailable => "Natural Gas Not Available",
Utilities::None => "None",
Utilities::Other => "Other",
Utilities::PhoneAvailable => "Phone Available",
Utilities::PhoneConnected => "Phone Connected",
Utilities::PhoneNotAvailable => "Phone Not Available",
Utilities::Propane => "Propane",
Utilities::SeeRemarks => "See Remarks",
Utilities::SewerAvailable => "Sewer Available",
Utilities::SewerConnected => "Sewer Connected",
Utilities::SewerNotAvailable => "Sewer Not Available",
Utilities::UndergroundUtilities => "Underground Utilities",
Utilities::WaterAvailable => "Water Available",
Utilities::WaterConnected => "Water Connected",
Utilities::WaterNotAvailable => "Water Not Available",
Utilities::OpenEnumeration(s) => s,
}
}
}
impl Serialize for Utilities {
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 Utilities {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}