1use super::{
2 AufAbschlag, Bo4eObject, BoTyp, Energiemix, Kundentyp, Marktteilnehmer, Preisgarantie,
3 Registeranzahl, Sparte, Tarifberechnungsparameter, Tarifeinschraenkung, Tarifmerkmal,
4 Tarifpreisposition, Tariftyp, Vertragskonditionen, Zeitraum, ZusatzAttribut,
5};
6#[derive(Debug, Clone, PartialEq)]
7#[cfg_attr(not(feature = "json"), derive(Eq, 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 Tarifpreisblatt {
18 #[cfg_attr(feature = "serde", serde(rename = "anbieter"))]
20 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
21 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
22 pub anbieter: Option<Box<Marktteilnehmer>>,
23 #[cfg_attr(feature = "serde", serde(rename = "anbietername"))]
25 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
26 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
27 pub anbietername: Option<String>,
28 #[cfg_attr(feature = "serde", serde(rename = "anwendungVon"))]
31 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
32 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
33 #[cfg_attr(feature = "serde", serde(default))]
34 #[cfg_attr(
35 feature = "schemars",
36 schemars(schema_with = "crate::schema_helpers::opt_datetime_schema")
37 )]
38 #[cfg_attr(
39 all(feature = "serde", feature = "time"),
40 serde(with = "time::serde::rfc3339::option")
41 )]
42 #[cfg(feature = "time")]
43 pub anwendung_von: Option<time::OffsetDateTime>,
44 #[cfg_attr(feature = "serde", serde(rename = "anwendungVon"))]
47 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
48 #[cfg_attr(feature = "serde", serde(default))]
49 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
50 #[cfg_attr(
51 feature = "schemars",
52 schemars(schema_with = "crate::schema_helpers::opt_datetime_schema")
53 )]
54 #[cfg(not(feature = "time"))]
55 pub anwendung_von: Option<String>,
56 #[cfg_attr(feature = "serde", serde(rename = "bemerkung"))]
58 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
59 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
60 pub bemerkung: Option<String>,
61 #[cfg_attr(feature = "serde", serde(rename = "berechnungsparameter"))]
63 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
64 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
65 pub berechnungsparameter: Option<Tarifberechnungsparameter>,
66 #[cfg_attr(feature = "serde", serde(rename = "bezeichnung"))]
68 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
69 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
70 pub bezeichnung: Option<String>,
71 #[cfg_attr(feature = "serde", serde(rename = "energiemix"))]
73 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
74 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
75 pub energiemix: Option<Energiemix>,
76 #[cfg_attr(feature = "serde", serde(rename = "_id"))]
79 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
80 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
81 pub id: Option<String>,
82 #[cfg_attr(feature = "serde", serde(rename = "kundentypen"))]
84 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
85 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
86 pub kundentypen: Option<Vec<Kundentyp>>,
87 #[cfg_attr(feature = "serde", serde(rename = "preisgarantie"))]
89 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
90 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
91 pub preisgarantie: Option<Preisgarantie>,
92 #[cfg_attr(feature = "serde", serde(rename = "preisstand"))]
94 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
95 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
96 #[cfg_attr(feature = "serde", serde(default))]
97 #[cfg_attr(
98 feature = "schemars",
99 schemars(schema_with = "crate::schema_helpers::opt_datetime_schema")
100 )]
101 #[cfg_attr(
102 all(feature = "serde", feature = "time"),
103 serde(with = "time::serde::rfc3339::option")
104 )]
105 #[cfg(feature = "time")]
106 pub preisstand: Option<time::OffsetDateTime>,
107 #[cfg_attr(feature = "serde", serde(rename = "preisstand"))]
110 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
111 #[cfg_attr(feature = "serde", serde(default))]
112 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
113 #[cfg_attr(
114 feature = "schemars",
115 schemars(schema_with = "crate::schema_helpers::opt_datetime_schema")
116 )]
117 #[cfg(not(feature = "time"))]
118 pub preisstand: Option<String>,
119 #[cfg_attr(feature = "serde", serde(rename = "registeranzahl"))]
121 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
122 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
123 pub registeranzahl: Option<Registeranzahl>,
124 #[cfg_attr(feature = "serde", serde(rename = "sparte"))]
126 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
127 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
128 pub sparte: Option<Sparte>,
129 #[cfg_attr(feature = "serde", serde(rename = "tarifAufAbschlaege"))]
131 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
132 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
133 pub tarif_auf_abschlaege: Option<Vec<AufAbschlag>>,
134 #[cfg_attr(feature = "serde", serde(rename = "tarifeinschraenkung"))]
136 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
137 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
138 pub tarifeinschraenkung: Option<Tarifeinschraenkung>,
139 #[cfg_attr(feature = "serde", serde(rename = "tarifmerkmale"))]
141 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
142 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
143 pub tarifmerkmale: Option<Vec<Tarifmerkmal>>,
144 #[cfg_attr(feature = "serde", serde(rename = "tarifpreise"))]
146 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
147 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
148 pub tarifpreise: Option<Vec<Tarifpreisposition>>,
149 #[cfg_attr(feature = "serde", serde(rename = "tariftyp"))]
151 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
152 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
153 pub tariftyp: Option<Tariftyp>,
154 #[cfg_attr(feature = "serde", serde(rename = "_typ"))]
156 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
157 #[cfg_attr(
158 feature = "builder",
159 builder(default = Some(BoTyp::Tarifpreisblatt), setter(skip))
160 )]
161 pub typ: Option<BoTyp>,
162 #[cfg_attr(feature = "serde", serde(rename = "_version"))]
164 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
165 #[cfg_attr(
166 feature = "builder",
167 builder(default = Some("202607.1.0".to_owned()), setter(into))
168 )]
169 pub version: Option<String>,
170 #[cfg_attr(feature = "serde", serde(rename = "vertragskonditionen"))]
172 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
173 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
174 pub vertragskonditionen: Option<Vertragskonditionen>,
175 #[cfg_attr(feature = "serde", serde(rename = "website"))]
177 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
178 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
179 pub website: Option<String>,
180 #[cfg_attr(feature = "serde", serde(rename = "zeitlicheGueltigkeit"))]
182 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
183 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
184 pub zeitliche_gueltigkeit: Option<Zeitraum>,
185 #[cfg_attr(feature = "serde", serde(rename = "zusatzAttribute"))]
186 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
187 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
188 pub zusatz_attribute: Option<Vec<ZusatzAttribut>>,
189 #[cfg_attr(feature = "json", serde(flatten))]
192 #[cfg_attr(
193 feature = "json",
194 serde(skip_serializing_if = "crate::json::ext_map_is_empty")
195 )]
196 #[cfg_attr(not(feature = "json"), serde(skip))]
197 #[cfg_attr(feature = "builder", builder(default, setter(skip)))]
198 #[doc(hidden)]
199 pub _additional: crate::LimitedExtensionMap,
200}
201impl Default for Tarifpreisblatt {
202 fn default() -> Self {
203 Self {
204 anbieter: Default::default(),
205 anbietername: Default::default(),
206 anwendung_von: Default::default(),
207 bemerkung: Default::default(),
208 berechnungsparameter: Default::default(),
209 bezeichnung: Default::default(),
210 energiemix: Default::default(),
211 id: Default::default(),
212 kundentypen: Default::default(),
213 preisgarantie: Default::default(),
214 preisstand: Default::default(),
215 registeranzahl: Default::default(),
216 sparte: Default::default(),
217 tarif_auf_abschlaege: Default::default(),
218 tarifeinschraenkung: Default::default(),
219 tarifmerkmale: Default::default(),
220 tarifpreise: Default::default(),
221 tariftyp: Default::default(),
222 typ: Some(BoTyp::Tarifpreisblatt),
223 version: Some("202607.1.0".to_owned()),
224 vertragskonditionen: Default::default(),
225 website: Default::default(),
226 zeitliche_gueltigkeit: Default::default(),
227 zusatz_attribute: Default::default(),
228 _additional: Default::default(),
229 }
230 }
231}
232impl Bo4eObject for Tarifpreisblatt {
233 type BoTyp = BoTyp;
234 fn bo_type(&self) -> BoTyp {
235 self.typ.unwrap_or(BoTyp::Tarifpreisblatt)
236 }
237 fn schema_version(&self) -> &'static str {
238 "202607.1.0"
239 }
240 fn schema_series(&self) -> &'static str {
241 "202607"
242 }
243}
244#[cfg(feature = "json")]
245impl crate::json::sealed::Sealed for Tarifpreisblatt {}
246#[cfg(feature = "json")]
247impl crate::json::Bo4eJsonExt for Tarifpreisblatt {}
248#[cfg(feature = "json")]
249impl crate::json::Bo4eExtensionData for Tarifpreisblatt {
250 fn extension_data(&self) -> &indexmap::IndexMap<String, serde_json::Value> {
251 self._additional
252 .as_map()
253 .unwrap_or(&crate::json::extension::EMPTY_EXTENSION_MAP)
254 }
255 fn has_extension_data(&self) -> bool {
256 !self._additional.is_empty()
257 }
258}
259#[cfg(feature = "json")]
260impl std::fmt::Display for Tarifpreisblatt {
261 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
262 match serde_json::to_string(self) {
263 Ok(json) => f.write_str(&json),
264 Err(e) => write!(f, "<Tarifpreisblatt: serialization error: {e}>"),
265 }
266 }
267}
268impl crate::Bo4eStrict for Tarifpreisblatt {
269 fn collect_unknown_enums(&self, path: &str, out: &mut Vec<String>) {
270 if let Some(v) = &self.anbieter {
271 crate::Bo4eStrict::collect_unknown_enums(
272 &**v,
273 &crate::strict::field_path(path, "anbieter"),
274 out,
275 );
276 }
277 if let Some(v) = &self.berechnungsparameter {
278 crate::Bo4eStrict::collect_unknown_enums(
279 v,
280 &crate::strict::field_path(path, "berechnungsparameter"),
281 out,
282 );
283 }
284 if let Some(v) = &self.energiemix {
285 crate::Bo4eStrict::collect_unknown_enums(
286 v,
287 &crate::strict::field_path(path, "energiemix"),
288 out,
289 );
290 }
291 if let Some(items) = &self.kundentypen {
292 let child = crate::strict::field_path(path, "kundentypen");
293 for (i, item) in items.iter().enumerate() {
294 crate::Bo4eStrict::collect_unknown_enums(
295 item,
296 &crate::strict::index_path(&child, i),
297 out,
298 );
299 }
300 }
301 if let Some(v) = &self.preisgarantie {
302 crate::Bo4eStrict::collect_unknown_enums(
303 v,
304 &crate::strict::field_path(path, "preisgarantie"),
305 out,
306 );
307 }
308 if let Some(v) = &self.registeranzahl {
309 crate::Bo4eStrict::collect_unknown_enums(
310 v,
311 &crate::strict::field_path(path, "registeranzahl"),
312 out,
313 );
314 }
315 if let Some(v) = &self.sparte {
316 crate::Bo4eStrict::collect_unknown_enums(
317 v,
318 &crate::strict::field_path(path, "sparte"),
319 out,
320 );
321 }
322 if let Some(items) = &self.tarif_auf_abschlaege {
323 let child = crate::strict::field_path(path, "tarifAufAbschlaege");
324 for (i, item) in items.iter().enumerate() {
325 crate::Bo4eStrict::collect_unknown_enums(
326 item,
327 &crate::strict::index_path(&child, i),
328 out,
329 );
330 }
331 }
332 if let Some(v) = &self.tarifeinschraenkung {
333 crate::Bo4eStrict::collect_unknown_enums(
334 v,
335 &crate::strict::field_path(path, "tarifeinschraenkung"),
336 out,
337 );
338 }
339 if let Some(items) = &self.tarifmerkmale {
340 let child = crate::strict::field_path(path, "tarifmerkmale");
341 for (i, item) in items.iter().enumerate() {
342 crate::Bo4eStrict::collect_unknown_enums(
343 item,
344 &crate::strict::index_path(&child, i),
345 out,
346 );
347 }
348 }
349 if let Some(items) = &self.tarifpreise {
350 let child = crate::strict::field_path(path, "tarifpreise");
351 for (i, item) in items.iter().enumerate() {
352 crate::Bo4eStrict::collect_unknown_enums(
353 item,
354 &crate::strict::index_path(&child, i),
355 out,
356 );
357 }
358 }
359 if let Some(v) = &self.tariftyp {
360 crate::Bo4eStrict::collect_unknown_enums(
361 v,
362 &crate::strict::field_path(path, "tariftyp"),
363 out,
364 );
365 }
366 if let Some(v) = &self.vertragskonditionen {
367 crate::Bo4eStrict::collect_unknown_enums(
368 v,
369 &crate::strict::field_path(path, "vertragskonditionen"),
370 out,
371 );
372 }
373 if let Some(v) = &self.zeitliche_gueltigkeit {
374 crate::Bo4eStrict::collect_unknown_enums(
375 v,
376 &crate::strict::field_path(path, "zeitlicheGueltigkeit"),
377 out,
378 );
379 }
380 if let Some(items) = &self.zusatz_attribute {
381 let child = crate::strict::field_path(path, "zusatzAttribute");
382 for (i, item) in items.iter().enumerate() {
383 crate::Bo4eStrict::collect_unknown_enums(
384 item,
385 &crate::strict::index_path(&child, i),
386 out,
387 );
388 }
389 }
390 }
391}