1use super::{
2 Adresse, Bilanzierungsmethode, Bo4eObject, BoTyp, Energiemenge, Energierichtung, Gasqualitaet,
3 Gebiettyp, Geokoordinaten, Geschaeftspartner, Katasteradresse, Kundentyp, Lokationszuordnung,
4 Netzebene, Sparte, Verbrauchsart, Zaehlwerk, 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))]
14#[cfg_attr(
15 all(feature = "validate", feature = "versioned"),
16 garde(custom(crate::validation::v202607::validate_marktlokation))
17)]
18pub struct Marktlokation {
22 #[cfg_attr(feature = "serde", serde(rename = "bilanzierungsgebiet"))]
24 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
25 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
26 pub bilanzierungsgebiet: 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 = "endkunde"))]
34 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
35 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
36 pub endkunde: Option<Box<Geschaeftspartner>>,
37 #[cfg_attr(feature = "serde", serde(rename = "energierichtung"))]
39 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
40 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
41 pub energierichtung: Option<Energierichtung>,
42 #[cfg_attr(feature = "serde", serde(rename = "gasqualitaet"))]
44 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
45 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
46 pub gasqualitaet: Option<Gasqualitaet>,
47 #[cfg_attr(feature = "serde", serde(rename = "gebietstyp"))]
49 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
50 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
51 pub gebietstyp: Option<Gebiettyp>,
52 #[cfg_attr(feature = "serde", serde(rename = "geoadresse"))]
55 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
56 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
57 pub geoadresse: Option<Geokoordinaten>,
58 #[cfg_attr(feature = "serde", serde(rename = "grundversorgercodenr"))]
60 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
61 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
62 #[cfg_attr(feature = "validate", garde(dive))]
63 pub grundversorgercodenr: Option<crate::identifiers::MarktpartnerId>,
64 #[cfg_attr(feature = "serde", serde(rename = "_id"))]
67 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
68 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
69 pub id: Option<String>,
70 #[cfg_attr(feature = "serde", serde(rename = "katasterinformation"))]
73 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
74 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
75 pub katasterinformation: Option<Katasteradresse>,
76 #[cfg_attr(feature = "serde", serde(rename = "kundengruppen"))]
78 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
79 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
80 pub kundengruppen: Option<Vec<Kundentyp>>,
81 #[cfg_attr(feature = "serde", serde(rename = "lokationsadresse"))]
83 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
84 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
85 pub lokationsadresse: Option<Adresse>,
86 #[cfg_attr(feature = "serde", serde(rename = "lokationsbuendelObjektcode"))]
88 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
89 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
90 pub lokationsbuendel_objektcode: Option<String>,
91 #[cfg_attr(feature = "serde", serde(rename = "lokationszuordnungen"))]
93 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
94 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
95 pub lokationszuordnungen: Option<Vec<Box<Lokationszuordnung>>>,
96 #[cfg_attr(feature = "serde", serde(rename = "marktgebiet"))]
98 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
99 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
100 #[cfg_attr(feature = "validate", garde(dive))]
101 pub marktgebiet: Option<crate::identifiers::EicCode>,
102 #[cfg_attr(feature = "serde", serde(rename = "marktlokationsId"))]
104 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
105 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
106 #[cfg_attr(feature = "validate", garde(dive))]
107 pub marktlokations_id: Option<crate::identifiers::MaloId>,
108 #[cfg_attr(feature = "serde", serde(rename = "netzbetreibercodenr"))]
110 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
111 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
112 #[cfg_attr(feature = "validate", garde(dive))]
113 pub netzbetreibercodenr: Option<crate::identifiers::MarktpartnerId>,
114 #[cfg_attr(feature = "serde", serde(rename = "netzebene"))]
118 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
119 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
120 pub netzebene: Option<Netzebene>,
121 #[cfg_attr(feature = "serde", serde(rename = "netzgebietsnr"))]
123 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
124 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
125 pub netzgebietsnr: Option<String>,
126 #[cfg_attr(feature = "serde", serde(rename = "regelzone"))]
128 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
129 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
130 #[cfg_attr(feature = "validate", garde(dive))]
131 pub regelzone: Option<crate::identifiers::EicCode>,
132 #[cfg_attr(feature = "serde", serde(rename = "sparte"))]
134 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
135 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
136 pub sparte: Option<Sparte>,
137 #[cfg_attr(feature = "serde", serde(rename = "_typ"))]
139 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
140 #[cfg_attr(
141 feature = "builder",
142 builder(default = Some(BoTyp::Marktlokation), setter(skip))
143 )]
144 pub typ: Option<BoTyp>,
145 #[cfg_attr(feature = "serde", serde(rename = "verbrauchsart"))]
147 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
148 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
149 pub verbrauchsart: Option<Verbrauchsart>,
150 #[cfg_attr(feature = "serde", serde(rename = "verbrauchsmengen"))]
151 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
152 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
153 pub verbrauchsmengen: Option<Vec<Box<Energiemenge>>>,
154 #[cfg_attr(feature = "serde", serde(rename = "_version"))]
156 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
157 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
158 pub version: Option<String>,
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(
164 feature = "serde",
165 serde(rename = "zaehlwerkeDerBeteiligtenMarktrolle")
166 )]
167 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
168 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
169 pub zaehlwerke_der_beteiligten_marktrolle: Option<Vec<Zaehlwerk>>,
170 #[cfg_attr(feature = "serde", serde(rename = "zusatzAttribute"))]
171 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
172 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
173 pub zusatz_attribute: Option<Vec<ZusatzAttribut>>,
174 #[cfg_attr(feature = "json", serde(flatten))]
177 #[cfg_attr(
178 feature = "json",
179 serde(skip_serializing_if = "crate::json::ext_map_is_empty")
180 )]
181 #[cfg_attr(not(feature = "json"), serde(skip))]
182 #[cfg_attr(feature = "builder", builder(default, setter(skip)))]
183 #[doc(hidden)]
184 pub _additional: crate::LimitedExtensionMap,
185}
186impl Default for Marktlokation {
187 fn default() -> Self {
188 Self {
189 typ: Some(BoTyp::Marktlokation),
190 bilanzierungsgebiet: Default::default(),
191 bilanzierungsmethode: Default::default(),
192 endkunde: Default::default(),
193 energierichtung: Default::default(),
194 gasqualitaet: Default::default(),
195 gebietstyp: Default::default(),
196 geoadresse: Default::default(),
197 grundversorgercodenr: Default::default(),
198 id: Default::default(),
199 katasterinformation: Default::default(),
200 kundengruppen: Default::default(),
201 lokationsadresse: Default::default(),
202 lokationsbuendel_objektcode: Default::default(),
203 lokationszuordnungen: Default::default(),
204 marktgebiet: Default::default(),
205 marktlokations_id: Default::default(),
206 netzbetreibercodenr: Default::default(),
207 netzebene: Default::default(),
208 netzgebietsnr: Default::default(),
209 regelzone: Default::default(),
210 sparte: Default::default(),
211 verbrauchsart: Default::default(),
212 verbrauchsmengen: Default::default(),
213 version: Default::default(),
214 zaehlwerke: Default::default(),
215 zaehlwerke_der_beteiligten_marktrolle: Default::default(),
216 zusatz_attribute: Default::default(),
217 _additional: Default::default(),
218 }
219 }
220}
221impl Bo4eObject for Marktlokation {
222 type BoTyp = BoTyp;
223 fn bo_type(&self) -> BoTyp {
224 self.typ.unwrap_or(BoTyp::Marktlokation)
225 }
226 fn schema_version(&self) -> &'static str {
227 "v202607.0.0"
228 }
229}
230#[cfg(feature = "json")]
231impl crate::json::sealed::Sealed for Marktlokation {}
232#[cfg(feature = "json")]
233impl crate::json::Bo4eJsonExt for Marktlokation {}
234#[cfg(feature = "json")]
235impl crate::json::Bo4eExtensionData for Marktlokation {
236 fn extension_data(&self) -> &indexmap::IndexMap<String, serde_json::Value> {
237 self._additional
238 .as_map()
239 .unwrap_or(&crate::json::extension::EMPTY_EXTENSION_MAP)
240 }
241 fn has_extension_data(&self) -> bool {
242 !self._additional.is_empty()
243 }
244}
245#[cfg(feature = "json")]
246impl std::fmt::Display for Marktlokation {
247 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
248 match serde_json::to_string(self) {
249 Ok(json) => f.write_str(&json),
250 Err(e) => write!(f, "<Marktlokation: serialization error: {e}>"),
251 }
252 }
253}