1use super::{
2 Befestigungsart, Bo4eObject, BoTyp, Geraet, Geschaeftspartner, Registeranzahl, Sparte,
3 Zaehlerauspraegung, Zaehlergroesse, Zaehlertyp, ZaehlertypSpezifikation, Zaehlwerk,
4 ZusatzAttribut,
5};
6#[derive(Debug, Clone, PartialEq)]
7#[cfg_attr(not(feature = "json"), derive(Hash))]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[cfg_attr(feature = "builder", derive(typed_builder::TypedBuilder))]
10#[cfg_attr(feature = "validate", derive(garde::Validate))]
11#[cfg_attr(feature = "validate", garde(allow_unvalidated))]
12#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
13#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
14pub struct Zaehler {
18 #[cfg_attr(feature = "serde", serde(rename = "befestigungsart"))]
20 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
21 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
22 pub befestigungsart: Option<Befestigungsart>,
23 #[cfg_attr(feature = "serde", serde(rename = "eichungBis"))]
25 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
26 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
27 #[cfg_attr(feature = "serde", serde(default))]
28 #[cfg_attr(
29 feature = "schemars",
30 schemars(schema_with = "crate::schema_helpers::opt_datetime_schema")
31 )]
32 #[cfg_attr(
33 all(feature = "serde", feature = "time"),
34 serde(with = "time::serde::rfc3339::option")
35 )]
36 #[cfg(feature = "time")]
37 pub eichung_bis: Option<time::OffsetDateTime>,
38 #[cfg_attr(feature = "serde", serde(rename = "eichungBis"))]
41 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
42 #[cfg_attr(feature = "serde", serde(default))]
43 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
44 #[cfg_attr(
45 feature = "schemars",
46 schemars(schema_with = "crate::schema_helpers::opt_datetime_schema")
47 )]
48 #[cfg(not(feature = "time"))]
49 pub eichung_bis: Option<String>,
50 #[cfg_attr(feature = "serde", serde(rename = "geraete"))]
52 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
53 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
54 pub geraete: Option<Vec<Box<Geraet>>>,
55 #[cfg_attr(feature = "serde", serde(rename = "_id"))]
58 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
59 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
60 pub id: Option<String>,
61 #[cfg_attr(feature = "serde", serde(rename = "istFernauslesbar"))]
63 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
64 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
65 pub ist_fernauslesbar: Option<bool>,
66 #[cfg_attr(feature = "serde", serde(rename = "letzteEichung"))]
68 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
69 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
70 #[cfg_attr(feature = "serde", serde(default))]
71 #[cfg_attr(
72 feature = "schemars",
73 schemars(schema_with = "crate::schema_helpers::opt_datetime_schema")
74 )]
75 #[cfg_attr(
76 all(feature = "serde", feature = "time"),
77 serde(with = "time::serde::rfc3339::option")
78 )]
79 #[cfg(feature = "time")]
80 pub letzte_eichung: Option<time::OffsetDateTime>,
81 #[cfg_attr(feature = "serde", serde(rename = "letzteEichung"))]
84 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
85 #[cfg_attr(feature = "serde", serde(default))]
86 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
87 #[cfg_attr(
88 feature = "schemars",
89 schemars(schema_with = "crate::schema_helpers::opt_datetime_schema")
90 )]
91 #[cfg(not(feature = "time"))]
92 pub letzte_eichung: Option<String>,
93 #[cfg_attr(feature = "serde", serde(rename = "registeranzahl"))]
95 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
96 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
97 pub registeranzahl: Option<Registeranzahl>,
98 #[cfg_attr(feature = "serde", serde(rename = "sparte"))]
100 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
101 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
102 pub sparte: Option<Sparte>,
103 #[cfg_attr(feature = "serde", serde(rename = "_typ"))]
105 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
106 #[cfg_attr(
107 feature = "builder",
108 builder(default = Some(BoTyp::Zaehler), setter(skip))
109 )]
110 pub typ: Option<BoTyp>,
111 #[cfg_attr(feature = "serde", serde(rename = "_version"))]
113 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
114 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
115 pub version: Option<String>,
116 #[cfg_attr(feature = "serde", serde(rename = "zaehlerauspraegung"))]
118 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
119 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
120 pub zaehlerauspraegung: Option<Zaehlerauspraegung>,
121 #[cfg_attr(feature = "serde", serde(rename = "zaehlergroesse"))]
123 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
124 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
125 pub zaehlergroesse: Option<Zaehlergroesse>,
126 #[cfg_attr(feature = "serde", serde(rename = "zaehlerhersteller"))]
128 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
129 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
130 pub zaehlerhersteller: Option<Box<Geschaeftspartner>>,
131 #[cfg_attr(feature = "serde", serde(rename = "zaehlerkonstante"))]
133 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
134 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
135 #[cfg(feature = "decimal")]
136 pub zaehlerkonstante: Option<rust_decimal::Decimal>,
137 #[cfg_attr(feature = "serde", serde(rename = "zaehlerkonstante"))]
140 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
141 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
142 #[cfg(not(feature = "decimal"))]
143 pub zaehlerkonstante: Option<String>,
144 #[cfg_attr(feature = "serde", serde(rename = "zaehlernummer"))]
146 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
147 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
148 pub zaehlernummer: Option<String>,
149 #[cfg_attr(feature = "serde", serde(rename = "zaehlertyp"))]
151 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
152 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
153 pub zaehlertyp: Option<Zaehlertyp>,
154 #[cfg_attr(feature = "serde", serde(rename = "zaehlertypSpezifikation"))]
156 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
157 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
158 pub zaehlertyp_spezifikation: Option<ZaehlertypSpezifikation>,
159 #[cfg_attr(feature = "serde", serde(rename = "zaehlwerke"))]
160 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
161 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
162 pub zaehlwerke: Option<Vec<Zaehlwerk>>,
163 #[cfg_attr(feature = "serde", serde(rename = "zusatzAttribute"))]
164 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
165 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
166 pub zusatz_attribute: Option<Vec<ZusatzAttribut>>,
167 #[cfg_attr(feature = "json", serde(flatten))]
170 #[cfg_attr(
171 feature = "json",
172 serde(skip_serializing_if = "crate::json::ext_map_is_empty")
173 )]
174 #[cfg_attr(not(feature = "json"), serde(skip))]
175 #[cfg_attr(feature = "builder", builder(default, setter(skip)))]
176 #[doc(hidden)]
177 pub _additional: crate::LimitedExtensionMap,
178}
179impl Default for Zaehler {
180 fn default() -> Self {
181 Self {
182 typ: Some(BoTyp::Zaehler),
183 befestigungsart: Default::default(),
184 eichung_bis: Default::default(),
185 geraete: Default::default(),
186 id: Default::default(),
187 ist_fernauslesbar: Default::default(),
188 letzte_eichung: Default::default(),
189 registeranzahl: Default::default(),
190 sparte: Default::default(),
191 version: Default::default(),
192 zaehlerauspraegung: Default::default(),
193 zaehlergroesse: Default::default(),
194 zaehlerhersteller: Default::default(),
195 zaehlerkonstante: Default::default(),
196 zaehlernummer: Default::default(),
197 zaehlertyp: Default::default(),
198 zaehlertyp_spezifikation: Default::default(),
199 zaehlwerke: Default::default(),
200 zusatz_attribute: Default::default(),
201 _additional: Default::default(),
202 }
203 }
204}
205impl Bo4eObject for Zaehler {
206 type BoTyp = BoTyp;
207 fn bo_type(&self) -> BoTyp {
208 self.typ.unwrap_or(BoTyp::Zaehler)
209 }
210 fn schema_version(&self) -> &'static str {
211 "v202607.0.0"
212 }
213}
214#[cfg(feature = "json")]
215impl crate::json::sealed::Sealed for Zaehler {}
216#[cfg(feature = "json")]
217impl crate::json::Bo4eJsonExt for Zaehler {}
218#[cfg(feature = "json")]
219impl crate::json::Bo4eExtensionData for Zaehler {
220 fn extension_data(&self) -> &indexmap::IndexMap<String, serde_json::Value> {
221 self._additional
222 .as_map()
223 .unwrap_or(&crate::json::extension::EMPTY_EXTENSION_MAP)
224 }
225 fn has_extension_data(&self) -> bool {
226 !self._additional.is_empty()
227 }
228}
229#[cfg(feature = "json")]
230impl std::fmt::Display for Zaehler {
231 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
232 match serde_json::to_string(self) {
233 Ok(json) => f.write_str(&json),
234 Err(e) => write!(f, "<Zaehler: serialization error: {e}>"),
235 }
236 }
237}