use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum SpaFeatures {
AboveGround,
Bath,
Community,
Fiberglass,
Gunite,
Heated,
InGround,
None,
Private,
SeeRemarks,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for SpaFeatures {
fn from_str(s: &str) -> SpaFeatures {
match s {
"Above Ground" => SpaFeatures::AboveGround,
"Bath" => SpaFeatures::Bath,
"Community" => SpaFeatures::Community,
"Fiberglass" => SpaFeatures::Fiberglass,
"Gunite" => SpaFeatures::Gunite,
"Heated" => SpaFeatures::Heated,
"In Ground" => SpaFeatures::InGround,
"None" => SpaFeatures::None,
"Private" => SpaFeatures::Private,
"See Remarks" => SpaFeatures::SeeRemarks,
_ => SpaFeatures::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> SpaFeatures {
match s.as_ref() {
"Above Ground" => SpaFeatures::AboveGround,
"Bath" => SpaFeatures::Bath,
"Community" => SpaFeatures::Community,
"Fiberglass" => SpaFeatures::Fiberglass,
"Gunite" => SpaFeatures::Gunite,
"Heated" => SpaFeatures::Heated,
"In Ground" => SpaFeatures::InGround,
"None" => SpaFeatures::None,
"Private" => SpaFeatures::Private,
"See Remarks" => SpaFeatures::SeeRemarks,
_ => SpaFeatures::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
SpaFeatures::AboveGround => "Above Ground",
SpaFeatures::Bath => "Bath",
SpaFeatures::Community => "Community",
SpaFeatures::Fiberglass => "Fiberglass",
SpaFeatures::Gunite => "Gunite",
SpaFeatures::Heated => "Heated",
SpaFeatures::InGround => "In Ground",
SpaFeatures::None => "None",
SpaFeatures::Private => "Private",
SpaFeatures::SeeRemarks => "See Remarks",
SpaFeatures::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
SpaFeatures::AboveGround => "Above Ground".into(),
SpaFeatures::Bath => "Bath".into(),
SpaFeatures::Community => "Community".into(),
SpaFeatures::Fiberglass => "Fiberglass".into(),
SpaFeatures::Gunite => "Gunite".into(),
SpaFeatures::Heated => "Heated".into(),
SpaFeatures::InGround => "In Ground".into(),
SpaFeatures::None => "None".into(),
SpaFeatures::Private => "Private".into(),
SpaFeatures::SeeRemarks => "See Remarks".into(),
SpaFeatures::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
SpaFeatures::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for SpaFeatures {
fn from(s: String) -> SpaFeatures {
match s.as_ref() {
"Above Ground" => SpaFeatures::AboveGround,
"Bath" => SpaFeatures::Bath,
"Community" => SpaFeatures::Community,
"Fiberglass" => SpaFeatures::Fiberglass,
"Gunite" => SpaFeatures::Gunite,
"Heated" => SpaFeatures::Heated,
"In Ground" => SpaFeatures::InGround,
"None" => SpaFeatures::None,
"Private" => SpaFeatures::Private,
"See Remarks" => SpaFeatures::SeeRemarks,
_ => SpaFeatures::OpenEnumeration(s),
}
}
}
impl From<&str> for SpaFeatures {
fn from(s: &str) -> SpaFeatures {
match s {
"Above Ground" => SpaFeatures::AboveGround,
"Bath" => SpaFeatures::Bath,
"Community" => SpaFeatures::Community,
"Fiberglass" => SpaFeatures::Fiberglass,
"Gunite" => SpaFeatures::Gunite,
"Heated" => SpaFeatures::Heated,
"In Ground" => SpaFeatures::InGround,
"None" => SpaFeatures::None,
"Private" => SpaFeatures::Private,
"See Remarks" => SpaFeatures::SeeRemarks,
_ => SpaFeatures::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a SpaFeatures> for &'a str {
fn from(s: &'a SpaFeatures) -> &'a str {
match s {
SpaFeatures::AboveGround => "Above Ground",
SpaFeatures::Bath => "Bath",
SpaFeatures::Community => "Community",
SpaFeatures::Fiberglass => "Fiberglass",
SpaFeatures::Gunite => "Gunite",
SpaFeatures::Heated => "Heated",
SpaFeatures::InGround => "In Ground",
SpaFeatures::None => "None",
SpaFeatures::Private => "Private",
SpaFeatures::SeeRemarks => "See Remarks",
SpaFeatures::OpenEnumeration(s) => s,
}
}
}
impl Serialize for SpaFeatures {
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 SpaFeatures {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}