1use super::{
2 Bilanzierungsmethode, Bo4eObject, BoTyp, Dienstleistungstyp, Geraet, Marktteilnehmer,
3 Netzebene, Preisposition, Preisstatus, Sparte, Zeitraum, ZusatzAttribut,
4};
5#[derive(Debug, Clone, PartialEq)]
6#[cfg_attr(not(feature = "json"), derive(Eq, Hash))]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8#[cfg_attr(feature = "builder", derive(typed_builder::TypedBuilder))]
9#[cfg_attr(feature = "validate", derive(garde::Validate))]
10#[cfg_attr(feature = "validate", garde(allow_unvalidated))]
11#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
12#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
13pub struct PreisblattHardware {
17 #[cfg_attr(feature = "serde", serde(rename = "basisgeraet"))]
19 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
20 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
21 pub basisgeraet: Option<Box<Geraet>>,
22 #[cfg_attr(feature = "serde", serde(rename = "bezeichnung"))]
24 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
25 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
26 pub bezeichnung: Option<String>,
27 #[cfg_attr(feature = "serde", serde(rename = "bilanzierungsmethode"))]
29 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
30 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
31 pub bilanzierungsmethode: Option<Bilanzierungsmethode>,
32 #[cfg_attr(feature = "serde", serde(rename = "gueltigkeit"))]
34 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
35 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
36 pub gueltigkeit: Option<Zeitraum>,
37 #[cfg_attr(feature = "serde", serde(rename = "herausgeber"))]
39 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
40 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
41 pub herausgeber: Option<Box<Marktteilnehmer>>,
42 #[cfg_attr(feature = "serde", serde(rename = "_id"))]
45 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
46 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
47 pub id: Option<String>,
48 #[cfg_attr(feature = "serde", serde(rename = "inklusiveDienstleistungen"))]
50 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
51 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
52 pub inklusive_dienstleistungen: Option<Vec<Dienstleistungstyp>>,
53 #[cfg_attr(feature = "serde", serde(rename = "inklusiveGeraete"))]
55 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
56 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
57 pub inklusive_geraete: Option<Vec<Box<Geraet>>>,
58 #[cfg_attr(feature = "serde", serde(rename = "messebene"))]
60 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
61 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
62 pub messebene: Option<Netzebene>,
63 #[cfg_attr(feature = "serde", serde(rename = "preispositionen"))]
65 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
66 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
67 pub preispositionen: Option<Vec<Preisposition>>,
68 #[cfg_attr(feature = "serde", serde(rename = "preisstatus"))]
70 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
71 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
72 pub preisstatus: Option<Preisstatus>,
73 #[cfg_attr(feature = "serde", serde(rename = "sparte"))]
75 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
76 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
77 pub sparte: Option<Sparte>,
78 #[cfg_attr(feature = "serde", serde(rename = "_typ"))]
80 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
81 #[cfg_attr(
82 feature = "builder",
83 builder(default = Some(BoTyp::PreisblattHardware), setter(skip))
84 )]
85 pub typ: Option<BoTyp>,
86 #[cfg_attr(feature = "serde", serde(rename = "_version"))]
88 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
89 #[cfg_attr(
90 feature = "builder",
91 builder(default = Some("202607.1.0".to_owned()), setter(into))
92 )]
93 pub version: Option<String>,
94 #[cfg_attr(feature = "serde", serde(rename = "zusatzAttribute"))]
95 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
96 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
97 pub zusatz_attribute: Option<Vec<ZusatzAttribut>>,
98 #[cfg_attr(feature = "json", serde(flatten))]
101 #[cfg_attr(
102 feature = "json",
103 serde(skip_serializing_if = "crate::json::ext_map_is_empty")
104 )]
105 #[cfg_attr(not(feature = "json"), serde(skip))]
106 #[cfg_attr(feature = "builder", builder(default, setter(skip)))]
107 #[doc(hidden)]
108 pub _additional: crate::LimitedExtensionMap,
109}
110impl Default for PreisblattHardware {
111 fn default() -> Self {
112 Self {
113 basisgeraet: Default::default(),
114 bezeichnung: Default::default(),
115 bilanzierungsmethode: Default::default(),
116 gueltigkeit: Default::default(),
117 herausgeber: Default::default(),
118 id: Default::default(),
119 inklusive_dienstleistungen: Default::default(),
120 inklusive_geraete: Default::default(),
121 messebene: Default::default(),
122 preispositionen: Default::default(),
123 preisstatus: Default::default(),
124 sparte: Default::default(),
125 typ: Some(BoTyp::PreisblattHardware),
126 version: Some("202607.1.0".to_owned()),
127 zusatz_attribute: Default::default(),
128 _additional: Default::default(),
129 }
130 }
131}
132impl Bo4eObject for PreisblattHardware {
133 type BoTyp = BoTyp;
134 fn bo_type(&self) -> BoTyp {
135 self.typ.unwrap_or(BoTyp::PreisblattHardware)
136 }
137 fn schema_version(&self) -> &'static str {
138 "202607.1.0"
139 }
140 fn schema_series(&self) -> &'static str {
141 "202607"
142 }
143}
144#[cfg(feature = "json")]
145impl crate::json::sealed::Sealed for PreisblattHardware {}
146#[cfg(feature = "json")]
147impl crate::json::Bo4eJsonExt for PreisblattHardware {}
148#[cfg(feature = "json")]
149impl crate::json::Bo4eExtensionData for PreisblattHardware {
150 fn extension_data(&self) -> &indexmap::IndexMap<String, serde_json::Value> {
151 self._additional
152 .as_map()
153 .unwrap_or(&crate::json::extension::EMPTY_EXTENSION_MAP)
154 }
155 fn has_extension_data(&self) -> bool {
156 !self._additional.is_empty()
157 }
158}
159#[cfg(feature = "json")]
160impl std::fmt::Display for PreisblattHardware {
161 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
162 match serde_json::to_string(self) {
163 Ok(json) => f.write_str(&json),
164 Err(e) => write!(f, "<PreisblattHardware: serialization error: {e}>"),
165 }
166 }
167}
168impl crate::Bo4eStrict for PreisblattHardware {
169 fn collect_unknown_enums(&self, path: &str, out: &mut Vec<String>) {
170 if let Some(v) = &self.basisgeraet {
171 crate::Bo4eStrict::collect_unknown_enums(
172 &**v,
173 &crate::strict::field_path(path, "basisgeraet"),
174 out,
175 );
176 }
177 if let Some(v) = &self.bilanzierungsmethode {
178 crate::Bo4eStrict::collect_unknown_enums(
179 v,
180 &crate::strict::field_path(path, "bilanzierungsmethode"),
181 out,
182 );
183 }
184 if let Some(v) = &self.gueltigkeit {
185 crate::Bo4eStrict::collect_unknown_enums(
186 v,
187 &crate::strict::field_path(path, "gueltigkeit"),
188 out,
189 );
190 }
191 if let Some(v) = &self.herausgeber {
192 crate::Bo4eStrict::collect_unknown_enums(
193 &**v,
194 &crate::strict::field_path(path, "herausgeber"),
195 out,
196 );
197 }
198 if let Some(items) = &self.inklusive_dienstleistungen {
199 let child = crate::strict::field_path(path, "inklusiveDienstleistungen");
200 for (i, item) in items.iter().enumerate() {
201 crate::Bo4eStrict::collect_unknown_enums(
202 item,
203 &crate::strict::index_path(&child, i),
204 out,
205 );
206 }
207 }
208 if let Some(items) = &self.inklusive_geraete {
209 let child = crate::strict::field_path(path, "inklusiveGeraete");
210 for (i, item) in items.iter().enumerate() {
211 crate::Bo4eStrict::collect_unknown_enums(
212 &**item,
213 &crate::strict::index_path(&child, i),
214 out,
215 );
216 }
217 }
218 if let Some(v) = &self.messebene {
219 crate::Bo4eStrict::collect_unknown_enums(
220 v,
221 &crate::strict::field_path(path, "messebene"),
222 out,
223 );
224 }
225 if let Some(items) = &self.preispositionen {
226 let child = crate::strict::field_path(path, "preispositionen");
227 for (i, item) in items.iter().enumerate() {
228 crate::Bo4eStrict::collect_unknown_enums(
229 item,
230 &crate::strict::index_path(&child, i),
231 out,
232 );
233 }
234 }
235 if let Some(v) = &self.preisstatus {
236 crate::Bo4eStrict::collect_unknown_enums(
237 v,
238 &crate::strict::field_path(path, "preisstatus"),
239 out,
240 );
241 }
242 if let Some(v) = &self.sparte {
243 crate::Bo4eStrict::collect_unknown_enums(
244 v,
245 &crate::strict::field_path(path, "sparte"),
246 out,
247 );
248 }
249 if let Some(items) = &self.zusatz_attribute {
250 let child = crate::strict::field_path(path, "zusatzAttribute");
251 for (i, item) in items.iter().enumerate() {
252 crate::Bo4eStrict::collect_unknown_enums(
253 item,
254 &crate::strict::index_path(&child, i),
255 out,
256 );
257 }
258 }
259 }
260}