Skip to main content

rubo4e/generated/v202607/
marktteilnehmer.rs

1use super::{
2    Bo4eObject, BoTyp, Geschaeftspartner, Marktrolle, Rollencodetyp, Sparte, ZusatzAttribut,
3};
4#[derive(Debug, Clone, PartialEq)]
5#[cfg_attr(not(feature = "json"), derive(Eq, Hash))]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7#[cfg_attr(feature = "builder", derive(typed_builder::TypedBuilder))]
8#[cfg_attr(feature = "validate", derive(garde::Validate))]
9#[cfg_attr(feature = "validate", garde(allow_unvalidated))]
10#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
11#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
12/// Objekt zur Aufnahme der Information zu einem Marktteilnehmer
13///
14/// > **Note:** [Marktteilnehmer JSON Schema](https://json-schema.app/view/%23?url=https://raw.githubusercontent.com/BO4E/BO4E-Schemas/v202607.1.0/src/bo4e_schemas/bo/Marktteilnehmer.json)
15pub struct Marktteilnehmer {
16    /// Der zu diesem Marktteilnehmer gehörende Geschäftspartner
17    #[cfg_attr(feature = "serde", serde(rename = "geschaeftspartner"))]
18    #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
19    #[cfg_attr(feature = "builder", builder(default, setter(into)))]
20    pub geschaeftspartner: Option<Box<Geschaeftspartner>>,
21    /// Eine generische ID, die für eigene Zwecke genutzt werden kann.
22    /// Z.B. könnten hier UUIDs aus einer Datenbank stehen oder URLs zu einem Backend-System.
23    #[cfg_attr(feature = "serde", serde(rename = "_id"))]
24    #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
25    #[cfg_attr(feature = "builder", builder(default, setter(into)))]
26    pub id: Option<String>,
27    /// Die 1:1-Kommunikationsadresse des Marktteilnehmers. Diese wird in der Marktkommunikation verwendet. Konkret kann dies eine eMail-Adresse oder ein AS4-Endpunkt sein.
28    #[cfg_attr(feature = "serde", serde(rename = "makoadresse"))]
29    #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
30    #[cfg_attr(feature = "builder", builder(default, setter(into)))]
31    pub makoadresse: Option<Vec<String>>,
32    /// Gibt im Klartext die Bezeichnung der Marktrolle an
33    #[cfg_attr(feature = "serde", serde(rename = "marktrolle"))]
34    #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
35    #[cfg_attr(feature = "builder", builder(default, setter(into)))]
36    pub marktrolle: Option<Marktrolle>,
37    /// Gibt die Codenummer der Marktrolle an
38    #[cfg_attr(feature = "serde", serde(rename = "rollencodenummer"))]
39    #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
40    #[cfg_attr(feature = "builder", builder(default, setter(into)))]
41    #[cfg_attr(feature = "validate", garde(dive))]
42    pub rollencodenummer: Option<crate::identifiers::MarktpartnerId>,
43    /// Gibt den Typ des Codes an
44    #[cfg_attr(feature = "serde", serde(rename = "rollencodetyp"))]
45    #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
46    #[cfg_attr(feature = "builder", builder(default, setter(into)))]
47    pub rollencodetyp: Option<Rollencodetyp>,
48    /// Sparte des Marktteilnehmers, z.B. Gas oder Strom
49    #[cfg_attr(feature = "serde", serde(rename = "sparte"))]
50    #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
51    #[cfg_attr(feature = "builder", builder(default, setter(into)))]
52    pub sparte: Option<Sparte>,
53    /// BO4E type discriminant — always `BoTyp::Marktteilnehmer` for this struct.
54    #[cfg_attr(feature = "serde", serde(rename = "_typ"))]
55    #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
56    #[cfg_attr(
57        feature = "builder",
58        builder(default = Some(BoTyp::Marktteilnehmer), setter(skip))
59    )]
60    pub typ: Option<BoTyp>,
61    /// Version der BO-Struktur aka "fachliche Versionierung"
62    #[cfg_attr(feature = "serde", serde(rename = "_version"))]
63    #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
64    #[cfg_attr(
65        feature = "builder",
66        builder(default = Some("202607.1.0".to_owned()), setter(into))
67    )]
68    pub version: Option<String>,
69    #[cfg_attr(feature = "serde", serde(rename = "zusatzAttribute"))]
70    #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
71    #[cfg_attr(feature = "builder", builder(default, setter(into)))]
72    pub zusatz_attribute: Option<Vec<ZusatzAttribut>>,
73    /// Unknown JSON fields captured during deserialization for round-trip preservation.
74    /// `None` when no unknown fields were present (zero heap allocation).
75    #[cfg_attr(feature = "json", serde(flatten))]
76    #[cfg_attr(
77        feature = "json",
78        serde(skip_serializing_if = "crate::json::ext_map_is_empty")
79    )]
80    #[cfg_attr(not(feature = "json"), serde(skip))]
81    #[cfg_attr(feature = "builder", builder(default, setter(skip)))]
82    #[doc(hidden)]
83    pub _additional: crate::LimitedExtensionMap,
84}
85impl Default for Marktteilnehmer {
86    fn default() -> Self {
87        Self {
88            geschaeftspartner: Default::default(),
89            id: Default::default(),
90            makoadresse: Default::default(),
91            marktrolle: Default::default(),
92            rollencodenummer: Default::default(),
93            rollencodetyp: Default::default(),
94            sparte: Default::default(),
95            typ: Some(BoTyp::Marktteilnehmer),
96            version: Some("202607.1.0".to_owned()),
97            zusatz_attribute: Default::default(),
98            _additional: Default::default(),
99        }
100    }
101}
102impl Bo4eObject for Marktteilnehmer {
103    type BoTyp = BoTyp;
104    fn bo_type(&self) -> BoTyp {
105        self.typ.unwrap_or(BoTyp::Marktteilnehmer)
106    }
107    fn schema_version(&self) -> &'static str {
108        "202607.1.0"
109    }
110    fn schema_series(&self) -> &'static str {
111        "202607"
112    }
113}
114#[cfg(feature = "json")]
115impl crate::json::sealed::Sealed for Marktteilnehmer {}
116#[cfg(feature = "json")]
117impl crate::json::Bo4eJsonExt for Marktteilnehmer {}
118#[cfg(feature = "json")]
119impl crate::json::Bo4eExtensionData for Marktteilnehmer {
120    fn extension_data(&self) -> &indexmap::IndexMap<String, serde_json::Value> {
121        self._additional
122            .as_map()
123            .unwrap_or(&crate::json::extension::EMPTY_EXTENSION_MAP)
124    }
125    fn has_extension_data(&self) -> bool {
126        !self._additional.is_empty()
127    }
128}
129#[cfg(feature = "json")]
130impl std::fmt::Display for Marktteilnehmer {
131    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
132        match serde_json::to_string(self) {
133            Ok(json) => f.write_str(&json),
134            Err(e) => write!(f, "<Marktteilnehmer: serialization error: {e}>"),
135        }
136    }
137}
138impl crate::Bo4eStrict for Marktteilnehmer {
139    fn collect_unknown_enums(&self, path: &str, out: &mut Vec<String>) {
140        if let Some(v) = &self.geschaeftspartner {
141            crate::Bo4eStrict::collect_unknown_enums(
142                &**v,
143                &crate::strict::field_path(path, "geschaeftspartner"),
144                out,
145            );
146        }
147        if let Some(v) = &self.marktrolle {
148            crate::Bo4eStrict::collect_unknown_enums(
149                v,
150                &crate::strict::field_path(path, "marktrolle"),
151                out,
152            );
153        }
154        if let Some(v) = &self.rollencodetyp {
155            crate::Bo4eStrict::collect_unknown_enums(
156                v,
157                &crate::strict::field_path(path, "rollencodetyp"),
158                out,
159            );
160        }
161        if let Some(v) = &self.sparte {
162            crate::Bo4eStrict::collect_unknown_enums(
163                v,
164                &crate::strict::field_path(path, "sparte"),
165                out,
166            );
167        }
168        if let Some(items) = &self.zusatz_attribute {
169            let child = crate::strict::field_path(path, "zusatzAttribute");
170            for (i, item) in items.iter().enumerate() {
171                crate::Bo4eStrict::collect_unknown_enums(
172                    item,
173                    &crate::strict::index_path(&child, i),
174                    out,
175                );
176            }
177        }
178    }
179}