use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum Sewer {
AerobicSeptic,
Cesspool,
EngineeredSeptic,
HoldingTank,
MoundSeptic,
None,
Other,
PercTestOnFile,
PercTestRequired,
PrivateSewer,
PublicSewer,
SepticNeeded,
SepticTank,
SharedSeptic,
Unknown,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for Sewer {
fn from_str(s: &str) -> Sewer {
match s {
"Aerobic Septic" => Sewer::AerobicSeptic,
"Cesspool" => Sewer::Cesspool,
"Engineered Septic" => Sewer::EngineeredSeptic,
"Holding Tank" => Sewer::HoldingTank,
"Mound Septic" => Sewer::MoundSeptic,
"None" => Sewer::None,
"Other" => Sewer::Other,
"Perc Test On File" => Sewer::PercTestOnFile,
"Perc Test Required" => Sewer::PercTestRequired,
"Private Sewer" => Sewer::PrivateSewer,
"Public Sewer" => Sewer::PublicSewer,
"Septic Needed" => Sewer::SepticNeeded,
"Septic Tank" => Sewer::SepticTank,
"Shared Septic" => Sewer::SharedSeptic,
"Unknown" => Sewer::Unknown,
_ => Sewer::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> Sewer {
match s.as_ref() {
"Aerobic Septic" => Sewer::AerobicSeptic,
"Cesspool" => Sewer::Cesspool,
"Engineered Septic" => Sewer::EngineeredSeptic,
"Holding Tank" => Sewer::HoldingTank,
"Mound Septic" => Sewer::MoundSeptic,
"None" => Sewer::None,
"Other" => Sewer::Other,
"Perc Test On File" => Sewer::PercTestOnFile,
"Perc Test Required" => Sewer::PercTestRequired,
"Private Sewer" => Sewer::PrivateSewer,
"Public Sewer" => Sewer::PublicSewer,
"Septic Needed" => Sewer::SepticNeeded,
"Septic Tank" => Sewer::SepticTank,
"Shared Septic" => Sewer::SharedSeptic,
"Unknown" => Sewer::Unknown,
_ => Sewer::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
Sewer::AerobicSeptic => "Aerobic Septic",
Sewer::Cesspool => "Cesspool",
Sewer::EngineeredSeptic => "Engineered Septic",
Sewer::HoldingTank => "Holding Tank",
Sewer::MoundSeptic => "Mound Septic",
Sewer::None => "None",
Sewer::Other => "Other",
Sewer::PercTestOnFile => "Perc Test On File",
Sewer::PercTestRequired => "Perc Test Required",
Sewer::PrivateSewer => "Private Sewer",
Sewer::PublicSewer => "Public Sewer",
Sewer::SepticNeeded => "Septic Needed",
Sewer::SepticTank => "Septic Tank",
Sewer::SharedSeptic => "Shared Septic",
Sewer::Unknown => "Unknown",
Sewer::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
Sewer::AerobicSeptic => "Aerobic Septic".into(),
Sewer::Cesspool => "Cesspool".into(),
Sewer::EngineeredSeptic => "Engineered Septic".into(),
Sewer::HoldingTank => "Holding Tank".into(),
Sewer::MoundSeptic => "Mound Septic".into(),
Sewer::None => "None".into(),
Sewer::Other => "Other".into(),
Sewer::PercTestOnFile => "Perc Test On File".into(),
Sewer::PercTestRequired => "Perc Test Required".into(),
Sewer::PrivateSewer => "Private Sewer".into(),
Sewer::PublicSewer => "Public Sewer".into(),
Sewer::SepticNeeded => "Septic Needed".into(),
Sewer::SepticTank => "Septic Tank".into(),
Sewer::SharedSeptic => "Shared Septic".into(),
Sewer::Unknown => "Unknown".into(),
Sewer::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
Sewer::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for Sewer {
fn from(s: String) -> Sewer {
match s.as_ref() {
"Aerobic Septic" => Sewer::AerobicSeptic,
"Cesspool" => Sewer::Cesspool,
"Engineered Septic" => Sewer::EngineeredSeptic,
"Holding Tank" => Sewer::HoldingTank,
"Mound Septic" => Sewer::MoundSeptic,
"None" => Sewer::None,
"Other" => Sewer::Other,
"Perc Test On File" => Sewer::PercTestOnFile,
"Perc Test Required" => Sewer::PercTestRequired,
"Private Sewer" => Sewer::PrivateSewer,
"Public Sewer" => Sewer::PublicSewer,
"Septic Needed" => Sewer::SepticNeeded,
"Septic Tank" => Sewer::SepticTank,
"Shared Septic" => Sewer::SharedSeptic,
"Unknown" => Sewer::Unknown,
_ => Sewer::OpenEnumeration(s),
}
}
}
impl From<&str> for Sewer {
fn from(s: &str) -> Sewer {
match s {
"Aerobic Septic" => Sewer::AerobicSeptic,
"Cesspool" => Sewer::Cesspool,
"Engineered Septic" => Sewer::EngineeredSeptic,
"Holding Tank" => Sewer::HoldingTank,
"Mound Septic" => Sewer::MoundSeptic,
"None" => Sewer::None,
"Other" => Sewer::Other,
"Perc Test On File" => Sewer::PercTestOnFile,
"Perc Test Required" => Sewer::PercTestRequired,
"Private Sewer" => Sewer::PrivateSewer,
"Public Sewer" => Sewer::PublicSewer,
"Septic Needed" => Sewer::SepticNeeded,
"Septic Tank" => Sewer::SepticTank,
"Shared Septic" => Sewer::SharedSeptic,
"Unknown" => Sewer::Unknown,
_ => Sewer::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a Sewer> for &'a str {
fn from(s: &'a Sewer) -> &'a str {
match s {
Sewer::AerobicSeptic => "Aerobic Septic",
Sewer::Cesspool => "Cesspool",
Sewer::EngineeredSeptic => "Engineered Septic",
Sewer::HoldingTank => "Holding Tank",
Sewer::MoundSeptic => "Mound Septic",
Sewer::None => "None",
Sewer::Other => "Other",
Sewer::PercTestOnFile => "Perc Test On File",
Sewer::PercTestRequired => "Perc Test Required",
Sewer::PrivateSewer => "Private Sewer",
Sewer::PublicSewer => "Public Sewer",
Sewer::SepticNeeded => "Septic Needed",
Sewer::SepticTank => "Septic Tank",
Sewer::SharedSeptic => "Shared Septic",
Sewer::Unknown => "Unknown",
Sewer::OpenEnumeration(s) => s,
}
}
}
impl Serialize for Sewer {
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 Sewer {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}