bo4e_core/enums/
eco_label.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
11#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
12#[cfg_attr(feature = "json-schema", schemars(rename = "Oekolabel"))]
13#[non_exhaustive]
14pub enum EcoLabel {
15 #[serde(rename = "ENERGREEN")]
17 Energreen,
18
19 #[serde(rename = "GASGREEN_GRUENER_STROM")]
21 GasgreenGruenerStrom,
22
23 #[serde(rename = "GASGREEN")]
25 Gasgreen,
26
27 #[serde(rename = "GRUENER_STROM_GOLD")]
29 GruenerStromGold,
30
31 #[serde(rename = "GRUENER_STROM_SILBER")]
33 GruenerStromSilber,
34
35 #[serde(rename = "GRUENER_STROM")]
37 GruenerStrom,
38
39 #[serde(rename = "GRUENES_GAS")]
41 GruenesGas,
42
43 #[serde(rename = "NATURWATT_STROM")]
45 NaturwattStrom,
46
47 #[serde(rename = "OK_POWER")]
49 OkPower,
50
51 #[serde(rename = "RENEWABLE_PLUS")]
53 RenewablePlus,
54
55 #[serde(rename = "WATERGREEN")]
57 Watergreen,
58
59 #[serde(rename = "WATERGREEN_PLUS")]
61 WatergreenPlus,
62}
63
64impl EcoLabel {
65 pub fn german_name(&self) -> &'static str {
67 match self {
68 Self::Energreen => "Energreen",
69 Self::GasgreenGruenerStrom => "Gasgreen Grüner Strom",
70 Self::Gasgreen => "Gasgreen",
71 Self::GruenerStromGold => "Grüner Strom Gold",
72 Self::GruenerStromSilber => "Grüner Strom Silber",
73 Self::GruenerStrom => "Grüner Strom",
74 Self::GruenesGas => "Grünes Gas",
75 Self::NaturwattStrom => "Naturwatt Strom",
76 Self::OkPower => "ok-power",
77 Self::RenewablePlus => "RenewablePLUS",
78 Self::Watergreen => "Watergreen",
79 Self::WatergreenPlus => "Watergreen Plus",
80 }
81 }
82}
83
84#[cfg(test)]
85mod tests {
86 use super::*;
87
88 #[test]
89 fn test_serialize() {
90 assert_eq!(
91 serde_json::to_string(&EcoLabel::GruenerStromGold).unwrap(),
92 r#""GRUENER_STROM_GOLD""#
93 );
94 assert_eq!(
95 serde_json::to_string(&EcoLabel::OkPower).unwrap(),
96 r#""OK_POWER""#
97 );
98 }
99
100 #[test]
101 fn test_roundtrip() {
102 for label in [
103 EcoLabel::Energreen,
104 EcoLabel::GasgreenGruenerStrom,
105 EcoLabel::Gasgreen,
106 EcoLabel::GruenerStromGold,
107 EcoLabel::GruenerStromSilber,
108 EcoLabel::GruenerStrom,
109 EcoLabel::GruenesGas,
110 EcoLabel::NaturwattStrom,
111 EcoLabel::OkPower,
112 EcoLabel::RenewablePlus,
113 EcoLabel::Watergreen,
114 EcoLabel::WatergreenPlus,
115 ] {
116 let json = serde_json::to_string(&label).unwrap();
117 let parsed: EcoLabel = serde_json::from_str(&json).unwrap();
118 assert_eq!(label, parsed);
119 }
120 }
121}