use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum EcoLabel {
#[serde(rename = "ENERGREEN")]
Energreen,
#[serde(rename = "GASGREEN_GRUENER_STROM")]
GasgreenGruenerStrom,
#[serde(rename = "GASGREEN")]
Gasgreen,
#[serde(rename = "GRUENER_STROM_GOLD")]
GruenerStromGold,
#[serde(rename = "GRUENER_STROM_SILBER")]
GruenerStromSilber,
#[serde(rename = "GRUENER_STROM")]
GruenerStrom,
#[serde(rename = "GRUENES_GAS")]
GruenesGas,
#[serde(rename = "NATURWATT_STROM")]
NaturwattStrom,
#[serde(rename = "OK_POWER")]
OkPower,
#[serde(rename = "RENEWABLE_PLUS")]
RenewablePlus,
#[serde(rename = "WATERGREEN")]
Watergreen,
#[serde(rename = "WATERGREEN_PLUS")]
WatergreenPlus,
}
impl EcoLabel {
pub fn german_name(&self) -> &'static str {
match self {
Self::Energreen => "Energreen",
Self::GasgreenGruenerStrom => "Gasgreen Grüner Strom",
Self::Gasgreen => "Gasgreen",
Self::GruenerStromGold => "Grüner Strom Gold",
Self::GruenerStromSilber => "Grüner Strom Silber",
Self::GruenerStrom => "Grüner Strom",
Self::GruenesGas => "Grünes Gas",
Self::NaturwattStrom => "Naturwatt Strom",
Self::OkPower => "ok-power",
Self::RenewablePlus => "RenewablePLUS",
Self::Watergreen => "Watergreen",
Self::WatergreenPlus => "Watergreen Plus",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&EcoLabel::GruenerStromGold).unwrap(),
r#""GRUENER_STROM_GOLD""#
);
assert_eq!(
serde_json::to_string(&EcoLabel::OkPower).unwrap(),
r#""OK_POWER""#
);
}
#[test]
fn test_roundtrip() {
for label in [
EcoLabel::Energreen,
EcoLabel::GasgreenGruenerStrom,
EcoLabel::Gasgreen,
EcoLabel::GruenerStromGold,
EcoLabel::GruenerStromSilber,
EcoLabel::GruenerStrom,
EcoLabel::GruenesGas,
EcoLabel::NaturwattStrom,
EcoLabel::OkPower,
EcoLabel::RenewablePlus,
EcoLabel::Watergreen,
EcoLabel::WatergreenPlus,
] {
let json = serde_json::to_string(&label).unwrap();
let parsed: EcoLabel = serde_json::from_str(&json).unwrap();
assert_eq!(label, parsed);
}
}
}