1use super::{
2 Bo4eObject, BoTyp, EMobilitaetsart, Erzeugungsart, Lokationszuordnung, Menge, Speicherart,
3 TechnischeRessourceNutzung, TechnischeRessourceVerbrauchsart, Waermenutzung, ZusatzAttribut,
4};
5#[derive(Debug, Clone, PartialEq)]
6#[cfg_attr(not(feature = "json"), derive(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 TechnischeRessource {
17 #[cfg_attr(feature = "serde", serde(rename = "emobilitaetsart"))]
19 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
20 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
21 pub emobilitaetsart: Option<EMobilitaetsart>,
22 #[cfg_attr(feature = "serde", serde(rename = "erzeugungsart"))]
24 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
25 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
26 pub erzeugungsart: Option<Erzeugungsart>,
27 #[cfg_attr(feature = "serde", serde(rename = "_id"))]
30 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
31 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
32 pub id: Option<String>,
33 #[cfg_attr(feature = "serde", serde(rename = "istFernschaltbar"))]
35 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
36 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
37 pub ist_fernschaltbar: Option<bool>,
38 #[cfg_attr(feature = "serde", serde(rename = "istUnterbrechbar"))]
40 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
41 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
42 pub ist_unterbrechbar: Option<bool>,
43 #[cfg_attr(feature = "serde", serde(rename = "lokationsbuendelObjektcode"))]
45 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
46 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
47 pub lokationsbuendel_objektcode: Option<String>,
48 #[cfg_attr(feature = "serde", serde(rename = "lokationszuordnungen"))]
50 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
51 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
52 pub lokationszuordnungen: Option<Vec<Box<Lokationszuordnung>>>,
53 #[cfg_attr(feature = "serde", serde(rename = "nennleistungabgabe"))]
55 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
56 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
57 pub nennleistungabgabe: Option<Menge>,
58 #[cfg_attr(feature = "serde", serde(rename = "nennleistungaufnahme"))]
60 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
61 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
62 pub nennleistungaufnahme: Option<Menge>,
63 #[cfg_attr(feature = "serde", serde(rename = "speicherart"))]
65 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
66 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
67 pub speicherart: Option<Speicherart>,
68 #[cfg_attr(feature = "serde", serde(rename = "speicherkapazitaet"))]
70 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
71 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
72 pub speicherkapazitaet: Option<Menge>,
73 #[cfg_attr(feature = "serde", serde(rename = "technischeRessourceId"))]
75 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
76 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
77 #[cfg_attr(feature = "validate", garde(dive))]
78 pub technische_ressource_id: Option<crate::identifiers::TrId>,
79 #[cfg_attr(feature = "serde", serde(rename = "technischeRessourceNutzung"))]
81 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
82 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
83 pub technische_ressource_nutzung: Option<TechnischeRessourceNutzung>,
84 #[cfg_attr(feature = "serde", serde(rename = "technischeRessourceVerbrauchsart"))]
86 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
87 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
88 pub technische_ressource_verbrauchsart: Option<TechnischeRessourceVerbrauchsart>,
89 #[cfg_attr(feature = "serde", serde(rename = "_typ"))]
91 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
92 #[cfg_attr(
93 feature = "builder",
94 builder(default = Some(BoTyp::Technischeressource), setter(skip))
95 )]
96 pub typ: Option<BoTyp>,
97 #[cfg_attr(feature = "serde", serde(rename = "_version"))]
99 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
100 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
101 pub version: Option<String>,
102 #[cfg_attr(feature = "serde", serde(rename = "vorgelagerteMesslokationId"))]
104 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
105 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
106 pub vorgelagerte_messlokation_id: Option<String>,
107 #[cfg_attr(feature = "serde", serde(rename = "waermenutzung"))]
109 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
110 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
111 pub waermenutzung: Option<Waermenutzung>,
112 #[cfg_attr(feature = "serde", serde(rename = "zugeordneteMarktlokationId"))]
114 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
115 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
116 pub zugeordnete_marktlokation_id: Option<String>,
117 #[cfg_attr(feature = "serde", serde(rename = "zugeordneteSteuerbareRessourceId"))]
119 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
120 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
121 pub zugeordnete_steuerbare_ressource_id: Option<String>,
122 #[cfg_attr(feature = "serde", serde(rename = "zusatzAttribute"))]
123 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
124 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
125 pub zusatz_attribute: Option<Vec<ZusatzAttribut>>,
126 #[cfg_attr(feature = "json", serde(flatten))]
129 #[cfg_attr(
130 feature = "json",
131 serde(skip_serializing_if = "crate::json::ext_map_is_empty")
132 )]
133 #[cfg_attr(not(feature = "json"), serde(skip))]
134 #[cfg_attr(feature = "builder", builder(default, setter(skip)))]
135 #[doc(hidden)]
136 pub _additional: crate::LimitedExtensionMap,
137}
138impl Default for TechnischeRessource {
139 fn default() -> Self {
140 Self {
141 typ: Some(BoTyp::Technischeressource),
142 emobilitaetsart: Default::default(),
143 erzeugungsart: Default::default(),
144 id: Default::default(),
145 ist_fernschaltbar: Default::default(),
146 ist_unterbrechbar: Default::default(),
147 lokationsbuendel_objektcode: Default::default(),
148 lokationszuordnungen: Default::default(),
149 nennleistungabgabe: Default::default(),
150 nennleistungaufnahme: Default::default(),
151 speicherart: Default::default(),
152 speicherkapazitaet: Default::default(),
153 technische_ressource_id: Default::default(),
154 technische_ressource_nutzung: Default::default(),
155 technische_ressource_verbrauchsart: Default::default(),
156 version: Default::default(),
157 vorgelagerte_messlokation_id: Default::default(),
158 waermenutzung: Default::default(),
159 zugeordnete_marktlokation_id: Default::default(),
160 zugeordnete_steuerbare_ressource_id: Default::default(),
161 zusatz_attribute: Default::default(),
162 _additional: Default::default(),
163 }
164 }
165}
166impl Bo4eObject for TechnischeRessource {
167 type BoTyp = BoTyp;
168 fn bo_type(&self) -> BoTyp {
169 self.typ.unwrap_or(BoTyp::Technischeressource)
170 }
171 fn schema_version(&self) -> &'static str {
172 "v202607.0.0"
173 }
174}
175#[cfg(feature = "json")]
176impl crate::json::sealed::Sealed for TechnischeRessource {}
177#[cfg(feature = "json")]
178impl crate::json::Bo4eJsonExt for TechnischeRessource {}
179#[cfg(feature = "json")]
180impl crate::json::Bo4eExtensionData for TechnischeRessource {
181 fn extension_data(&self) -> &indexmap::IndexMap<String, serde_json::Value> {
182 self._additional
183 .as_map()
184 .unwrap_or(&crate::json::extension::EMPTY_EXTENSION_MAP)
185 }
186 fn has_extension_data(&self) -> bool {
187 !self._additional.is_empty()
188 }
189}
190#[cfg(feature = "json")]
191impl std::fmt::Display for TechnischeRessource {
192 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
193 match serde_json::to_string(self) {
194 Ok(json) => f.write_str(&json),
195 Err(e) => write!(f, "<TechnischeRessource: serialization error: {e}>"),
196 }
197 }
198}