use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum EcoCertificate {
#[serde(rename = "CMS_EE01")]
CmsEe01,
#[serde(rename = "CMS_EE02")]
CmsEe02,
#[serde(rename = "EECS")]
Eecs,
#[serde(rename = "FRAUNHOFER")]
Fraunhofer,
#[serde(rename = "BET")]
Bet,
#[serde(rename = "KLIMA_INVEST")]
KlimaInvest,
#[serde(rename = "LGA")]
Lga,
#[serde(rename = "FREIBERG")]
Freiberg,
#[serde(rename = "RECS")]
Recs,
#[serde(rename = "REGS_EGL")]
RegsEgl,
#[serde(rename = "TUEV")]
Tuev,
#[serde(rename = "TUEV_HESSEN")]
TuevHessen,
#[serde(rename = "TUEV_NORD")]
TuevNord,
#[serde(rename = "TUEV_RHEINLAND")]
TuevRheinland,
#[serde(rename = "TUEV_SUED")]
TuevSued,
#[serde(rename = "TUEV_SUED_EE01")]
TuevSuedEe01,
#[serde(rename = "TUEV_SUED_EE02")]
TuevSuedEe02,
}
impl EcoCertificate {
pub fn german_name(&self) -> &'static str {
match self {
Self::CmsEe01 => "CMS EE01",
Self::CmsEe02 => "CMS EE02",
Self::Eecs => "EECS",
Self::Fraunhofer => "Fraunhofer",
Self::Bet => "BET",
Self::KlimaInvest => "KlimaINVEST",
Self::Lga => "LGA",
Self::Freiberg => "Freiberg",
Self::Recs => "RECS",
Self::RegsEgl => "REGS EGL",
Self::Tuev => "TÜV",
Self::TuevHessen => "TÜV Hessen",
Self::TuevNord => "TÜV Nord",
Self::TuevRheinland => "TÜV Rheinland",
Self::TuevSued => "TÜV Süd",
Self::TuevSuedEe01 => "TÜV Süd EE01",
Self::TuevSuedEe02 => "TÜV Süd EE02",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&EcoCertificate::Eecs).unwrap(),
r#""EECS""#
);
assert_eq!(
serde_json::to_string(&EcoCertificate::TuevRheinland).unwrap(),
r#""TUEV_RHEINLAND""#
);
}
#[test]
fn test_roundtrip() {
for cert in [
EcoCertificate::CmsEe01,
EcoCertificate::CmsEe02,
EcoCertificate::Eecs,
EcoCertificate::Fraunhofer,
EcoCertificate::Bet,
EcoCertificate::KlimaInvest,
EcoCertificate::Lga,
EcoCertificate::Freiberg,
EcoCertificate::Recs,
EcoCertificate::RegsEgl,
EcoCertificate::Tuev,
EcoCertificate::TuevHessen,
EcoCertificate::TuevNord,
EcoCertificate::TuevRheinland,
EcoCertificate::TuevSued,
EcoCertificate::TuevSuedEe01,
EcoCertificate::TuevSuedEe02,
] {
let json = serde_json::to_string(&cert).unwrap();
let parsed: EcoCertificate = serde_json::from_str(&json).unwrap();
assert_eq!(cert, parsed);
}
}
}