rubo4e/generated/v202607/
steuerbare_ressource.rs1use super::{
2 Bo4eObject, BoTyp, Konfigurationsprodukt, Lokationszuordnung, Marktrolle,
3 SteuerkanalLeistungsbeschreibung, 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 SteuerbareRessource {
17 #[cfg_attr(feature = "serde", serde(rename = "eigenschaftMsbLokation"))]
19 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
20 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
21 pub eigenschaft_msb_lokation: Option<Marktrolle>,
22 #[cfg_attr(feature = "serde", serde(rename = "_id"))]
25 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
26 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
27 pub id: Option<String>,
28 #[cfg_attr(feature = "serde", serde(rename = "konfigurationsprodukte"))]
30 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
31 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
32 pub konfigurationsprodukte: Option<Vec<Konfigurationsprodukt>>,
33 #[cfg_attr(feature = "serde", serde(rename = "lokationsbuendelObjektcode"))]
35 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
36 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
37 pub lokationsbuendel_objektcode: Option<String>,
38 #[cfg_attr(feature = "serde", serde(rename = "lokationszuordnungen"))]
40 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
41 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
42 pub lokationszuordnungen: Option<Vec<Box<Lokationszuordnung>>>,
43 #[cfg_attr(feature = "serde", serde(rename = "steuerbareRessourceId"))]
45 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
46 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
47 #[cfg_attr(feature = "validate", garde(dive))]
48 pub steuerbare_ressource_id: Option<crate::identifiers::SrId>,
49 #[cfg_attr(feature = "serde", serde(rename = "steuerkanalLeistungsbeschreibung"))]
51 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
52 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
53 pub steuerkanal_leistungsbeschreibung: Option<SteuerkanalLeistungsbeschreibung>,
54 #[cfg_attr(feature = "serde", serde(rename = "_typ"))]
56 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
57 #[cfg_attr(
58 feature = "builder",
59 builder(default = Some(BoTyp::SteuerbareRessource), setter(skip))
60 )]
61 pub typ: Option<BoTyp>,
62 #[cfg_attr(feature = "serde", serde(rename = "_version"))]
64 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
65 #[cfg_attr(
66 feature = "builder",
67 builder(default = Some("202607.1.0".to_owned()), setter(into))
68 )]
69 pub version: Option<String>,
70 #[cfg_attr(feature = "serde", serde(rename = "zugeordneteMsbCodenummer"))]
72 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
73 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
74 #[cfg_attr(feature = "validate", garde(dive))]
75 pub zugeordnete_msb_codenummer: Option<crate::identifiers::MarktpartnerId>,
76 #[cfg_attr(feature = "serde", serde(rename = "zusatzAttribute"))]
77 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
78 #[cfg_attr(feature = "builder", builder(default, setter(into)))]
79 pub zusatz_attribute: Option<Vec<ZusatzAttribut>>,
80 #[cfg_attr(feature = "json", serde(flatten))]
83 #[cfg_attr(
84 feature = "json",
85 serde(skip_serializing_if = "crate::json::ext_map_is_empty")
86 )]
87 #[cfg_attr(not(feature = "json"), serde(skip))]
88 #[cfg_attr(feature = "builder", builder(default, setter(skip)))]
89 #[doc(hidden)]
90 pub _additional: crate::LimitedExtensionMap,
91}
92impl Default for SteuerbareRessource {
93 fn default() -> Self {
94 Self {
95 eigenschaft_msb_lokation: Default::default(),
96 id: Default::default(),
97 konfigurationsprodukte: Default::default(),
98 lokationsbuendel_objektcode: Default::default(),
99 lokationszuordnungen: Default::default(),
100 steuerbare_ressource_id: Default::default(),
101 steuerkanal_leistungsbeschreibung: Default::default(),
102 typ: Some(BoTyp::SteuerbareRessource),
103 version: Some("202607.1.0".to_owned()),
104 zugeordnete_msb_codenummer: Default::default(),
105 zusatz_attribute: Default::default(),
106 _additional: Default::default(),
107 }
108 }
109}
110impl Bo4eObject for SteuerbareRessource {
111 type BoTyp = BoTyp;
112 fn bo_type(&self) -> BoTyp {
113 self.typ.unwrap_or(BoTyp::SteuerbareRessource)
114 }
115 fn schema_version(&self) -> &'static str {
116 "202607.1.0"
117 }
118 fn schema_series(&self) -> &'static str {
119 "202607"
120 }
121}
122#[cfg(feature = "json")]
123impl crate::json::sealed::Sealed for SteuerbareRessource {}
124#[cfg(feature = "json")]
125impl crate::json::Bo4eJsonExt for SteuerbareRessource {}
126#[cfg(feature = "json")]
127impl crate::json::Bo4eExtensionData for SteuerbareRessource {
128 fn extension_data(&self) -> &indexmap::IndexMap<String, serde_json::Value> {
129 self._additional
130 .as_map()
131 .unwrap_or(&crate::json::extension::EMPTY_EXTENSION_MAP)
132 }
133 fn has_extension_data(&self) -> bool {
134 !self._additional.is_empty()
135 }
136}
137#[cfg(feature = "json")]
138impl std::fmt::Display for SteuerbareRessource {
139 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
140 match serde_json::to_string(self) {
141 Ok(json) => f.write_str(&json),
142 Err(e) => write!(f, "<SteuerbareRessource: serialization error: {e}>"),
143 }
144 }
145}
146impl crate::Bo4eStrict for SteuerbareRessource {
147 fn collect_unknown_enums(&self, path: &str, out: &mut Vec<String>) {
148 if let Some(v) = &self.eigenschaft_msb_lokation {
149 crate::Bo4eStrict::collect_unknown_enums(
150 v,
151 &crate::strict::field_path(path, "eigenschaftMsbLokation"),
152 out,
153 );
154 }
155 if let Some(items) = &self.konfigurationsprodukte {
156 let child = crate::strict::field_path(path, "konfigurationsprodukte");
157 for (i, item) in items.iter().enumerate() {
158 crate::Bo4eStrict::collect_unknown_enums(
159 item,
160 &crate::strict::index_path(&child, i),
161 out,
162 );
163 }
164 }
165 if let Some(items) = &self.lokationszuordnungen {
166 let child = crate::strict::field_path(path, "lokationszuordnungen");
167 for (i, item) in items.iter().enumerate() {
168 crate::Bo4eStrict::collect_unknown_enums(
169 &**item,
170 &crate::strict::index_path(&child, i),
171 out,
172 );
173 }
174 }
175 if let Some(v) = &self.steuerkanal_leistungsbeschreibung {
176 crate::Bo4eStrict::collect_unknown_enums(
177 v,
178 &crate::strict::field_path(path, "steuerkanalLeistungsbeschreibung"),
179 out,
180 );
181 }
182 if let Some(items) = &self.zusatz_attribute {
183 let child = crate::strict::field_path(path, "zusatzAttribute");
184 for (i, item) in items.iter().enumerate() {
185 crate::Bo4eStrict::collect_unknown_enums(
186 item,
187 &crate::strict::index_path(&child, i),
188 out,
189 );
190 }
191 }
192 }
193}