use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum Cooling {
AtticFan,
CeilingFans,
CentralAir,
Dual,
Ductless,
Electric,
ENERGYSTARQualifiedEquipment,
EvaporativeCooling,
ExhaustFan,
Gas,
Geothermal,
HeatPump,
HumidityControl,
MultiUnits,
None,
Other,
RoofTurbines,
SeparateMeters,
VariesbyUnit,
WallUnits,
WallWindowUnits,
WholeHouseFan,
WindowUnits,
Zoned,
OpenEnumeration(String),
}
impl crate::ResoEnumeration for Cooling {
fn from_str(s: &str) -> Cooling {
match s {
"Attic Fan" => Cooling::AtticFan,
"Ceiling Fan(s)" => Cooling::CeilingFans,
"Central Air" => Cooling::CentralAir,
"Dual" => Cooling::Dual,
"Ductless" => Cooling::Ductless,
"Electric" => Cooling::Electric,
"ENERGY STAR Qualified Equipment" => Cooling::ENERGYSTARQualifiedEquipment,
"Evaporative Cooling" => Cooling::EvaporativeCooling,
"Exhaust Fan" => Cooling::ExhaustFan,
"Gas" => Cooling::Gas,
"Geothermal" => Cooling::Geothermal,
"Heat Pump" => Cooling::HeatPump,
"Humidity Control" => Cooling::HumidityControl,
"Multi Units" => Cooling::MultiUnits,
"None" => Cooling::None,
"Other" => Cooling::Other,
"Roof Turbine(s)" => Cooling::RoofTurbines,
"Separate Meters" => Cooling::SeparateMeters,
"Varies by Unit" => Cooling::VariesbyUnit,
"Wall Unit(s)" => Cooling::WallUnits,
"Wall/Window Unit(s)" => Cooling::WallWindowUnits,
"Whole House Fan" => Cooling::WholeHouseFan,
"Window Unit(s)" => Cooling::WindowUnits,
"Zoned" => Cooling::Zoned,
_ => Cooling::OpenEnumeration(s.into()),
}
}
fn from_string(s: String) -> Cooling {
match s.as_ref() {
"Attic Fan" => Cooling::AtticFan,
"Ceiling Fan(s)" => Cooling::CeilingFans,
"Central Air" => Cooling::CentralAir,
"Dual" => Cooling::Dual,
"Ductless" => Cooling::Ductless,
"Electric" => Cooling::Electric,
"ENERGY STAR Qualified Equipment" => Cooling::ENERGYSTARQualifiedEquipment,
"Evaporative Cooling" => Cooling::EvaporativeCooling,
"Exhaust Fan" => Cooling::ExhaustFan,
"Gas" => Cooling::Gas,
"Geothermal" => Cooling::Geothermal,
"Heat Pump" => Cooling::HeatPump,
"Humidity Control" => Cooling::HumidityControl,
"Multi Units" => Cooling::MultiUnits,
"None" => Cooling::None,
"Other" => Cooling::Other,
"Roof Turbine(s)" => Cooling::RoofTurbines,
"Separate Meters" => Cooling::SeparateMeters,
"Varies by Unit" => Cooling::VariesbyUnit,
"Wall Unit(s)" => Cooling::WallUnits,
"Wall/Window Unit(s)" => Cooling::WallWindowUnits,
"Whole House Fan" => Cooling::WholeHouseFan,
"Window Unit(s)" => Cooling::WindowUnits,
"Zoned" => Cooling::Zoned,
_ => Cooling::OpenEnumeration(s),
}
}
fn to_str(&self) -> &str {
match self {
Cooling::AtticFan => "Attic Fan",
Cooling::CeilingFans => "Ceiling Fan(s)",
Cooling::CentralAir => "Central Air",
Cooling::Dual => "Dual",
Cooling::Ductless => "Ductless",
Cooling::Electric => "Electric",
Cooling::ENERGYSTARQualifiedEquipment => "ENERGY STAR Qualified Equipment",
Cooling::EvaporativeCooling => "Evaporative Cooling",
Cooling::ExhaustFan => "Exhaust Fan",
Cooling::Gas => "Gas",
Cooling::Geothermal => "Geothermal",
Cooling::HeatPump => "Heat Pump",
Cooling::HumidityControl => "Humidity Control",
Cooling::MultiUnits => "Multi Units",
Cooling::None => "None",
Cooling::Other => "Other",
Cooling::RoofTurbines => "Roof Turbine(s)",
Cooling::SeparateMeters => "Separate Meters",
Cooling::VariesbyUnit => "Varies by Unit",
Cooling::WallUnits => "Wall Unit(s)",
Cooling::WallWindowUnits => "Wall/Window Unit(s)",
Cooling::WholeHouseFan => "Whole House Fan",
Cooling::WindowUnits => "Window Unit(s)",
Cooling::Zoned => "Zoned",
Cooling::OpenEnumeration(ref s) => s,
}
}
fn into_string(self) -> String {
match self {
Cooling::AtticFan => "Attic Fan".into(),
Cooling::CeilingFans => "Ceiling Fan(s)".into(),
Cooling::CentralAir => "Central Air".into(),
Cooling::Dual => "Dual".into(),
Cooling::Ductless => "Ductless".into(),
Cooling::Electric => "Electric".into(),
Cooling::ENERGYSTARQualifiedEquipment => "ENERGY STAR Qualified Equipment".into(),
Cooling::EvaporativeCooling => "Evaporative Cooling".into(),
Cooling::ExhaustFan => "Exhaust Fan".into(),
Cooling::Gas => "Gas".into(),
Cooling::Geothermal => "Geothermal".into(),
Cooling::HeatPump => "Heat Pump".into(),
Cooling::HumidityControl => "Humidity Control".into(),
Cooling::MultiUnits => "Multi Units".into(),
Cooling::None => "None".into(),
Cooling::Other => "Other".into(),
Cooling::RoofTurbines => "Roof Turbine(s)".into(),
Cooling::SeparateMeters => "Separate Meters".into(),
Cooling::VariesbyUnit => "Varies by Unit".into(),
Cooling::WallUnits => "Wall Unit(s)".into(),
Cooling::WallWindowUnits => "Wall/Window Unit(s)".into(),
Cooling::WholeHouseFan => "Whole House Fan".into(),
Cooling::WindowUnits => "Window Unit(s)".into(),
Cooling::Zoned => "Zoned".into(),
Cooling::OpenEnumeration(s) => s,
}
}
fn fallback_value(&self) -> Option<&str> {
match self {
Cooling::OpenEnumeration(ref s) => Some(s),
_ => None,
}
}
}
impl From<String> for Cooling {
fn from(s: String) -> Cooling {
match s.as_ref() {
"Attic Fan" => Cooling::AtticFan,
"Ceiling Fan(s)" => Cooling::CeilingFans,
"Central Air" => Cooling::CentralAir,
"Dual" => Cooling::Dual,
"Ductless" => Cooling::Ductless,
"Electric" => Cooling::Electric,
"ENERGY STAR Qualified Equipment" => Cooling::ENERGYSTARQualifiedEquipment,
"Evaporative Cooling" => Cooling::EvaporativeCooling,
"Exhaust Fan" => Cooling::ExhaustFan,
"Gas" => Cooling::Gas,
"Geothermal" => Cooling::Geothermal,
"Heat Pump" => Cooling::HeatPump,
"Humidity Control" => Cooling::HumidityControl,
"Multi Units" => Cooling::MultiUnits,
"None" => Cooling::None,
"Other" => Cooling::Other,
"Roof Turbine(s)" => Cooling::RoofTurbines,
"Separate Meters" => Cooling::SeparateMeters,
"Varies by Unit" => Cooling::VariesbyUnit,
"Wall Unit(s)" => Cooling::WallUnits,
"Wall/Window Unit(s)" => Cooling::WallWindowUnits,
"Whole House Fan" => Cooling::WholeHouseFan,
"Window Unit(s)" => Cooling::WindowUnits,
"Zoned" => Cooling::Zoned,
_ => Cooling::OpenEnumeration(s),
}
}
}
impl From<&str> for Cooling {
fn from(s: &str) -> Cooling {
match s {
"Attic Fan" => Cooling::AtticFan,
"Ceiling Fan(s)" => Cooling::CeilingFans,
"Central Air" => Cooling::CentralAir,
"Dual" => Cooling::Dual,
"Ductless" => Cooling::Ductless,
"Electric" => Cooling::Electric,
"ENERGY STAR Qualified Equipment" => Cooling::ENERGYSTARQualifiedEquipment,
"Evaporative Cooling" => Cooling::EvaporativeCooling,
"Exhaust Fan" => Cooling::ExhaustFan,
"Gas" => Cooling::Gas,
"Geothermal" => Cooling::Geothermal,
"Heat Pump" => Cooling::HeatPump,
"Humidity Control" => Cooling::HumidityControl,
"Multi Units" => Cooling::MultiUnits,
"None" => Cooling::None,
"Other" => Cooling::Other,
"Roof Turbine(s)" => Cooling::RoofTurbines,
"Separate Meters" => Cooling::SeparateMeters,
"Varies by Unit" => Cooling::VariesbyUnit,
"Wall Unit(s)" => Cooling::WallUnits,
"Wall/Window Unit(s)" => Cooling::WallWindowUnits,
"Whole House Fan" => Cooling::WholeHouseFan,
"Window Unit(s)" => Cooling::WindowUnits,
"Zoned" => Cooling::Zoned,
_ => Cooling::OpenEnumeration(s.into()),
}
}
}
impl<'a> From<&'a Cooling> for &'a str {
fn from(s: &'a Cooling) -> &'a str {
match s {
Cooling::AtticFan => "Attic Fan",
Cooling::CeilingFans => "Ceiling Fan(s)",
Cooling::CentralAir => "Central Air",
Cooling::Dual => "Dual",
Cooling::Ductless => "Ductless",
Cooling::Electric => "Electric",
Cooling::ENERGYSTARQualifiedEquipment => "ENERGY STAR Qualified Equipment",
Cooling::EvaporativeCooling => "Evaporative Cooling",
Cooling::ExhaustFan => "Exhaust Fan",
Cooling::Gas => "Gas",
Cooling::Geothermal => "Geothermal",
Cooling::HeatPump => "Heat Pump",
Cooling::HumidityControl => "Humidity Control",
Cooling::MultiUnits => "Multi Units",
Cooling::None => "None",
Cooling::Other => "Other",
Cooling::RoofTurbines => "Roof Turbine(s)",
Cooling::SeparateMeters => "Separate Meters",
Cooling::VariesbyUnit => "Varies by Unit",
Cooling::WallUnits => "Wall Unit(s)",
Cooling::WallWindowUnits => "Wall/Window Unit(s)",
Cooling::WholeHouseFan => "Whole House Fan",
Cooling::WindowUnits => "Window Unit(s)",
Cooling::Zoned => "Zoned",
Cooling::OpenEnumeration(s) => s,
}
}
}
impl Serialize for Cooling {
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 Cooling {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
Ok(From::from(s))
}
}