use super::{
ComTyp, Energierichtung, Konzessionsabgabe, Mengeneinheit, Verbrauchsart,
VerwendungszweckProMarktrolle, Waermenutzung, Zaehlzeitregister, ZusatzAttribut,
};
#[derive(Debug, Clone, PartialEq, Default)]
#[cfg_attr(not(feature = "json"), derive(Hash))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "builder", derive(typed_builder::TypedBuilder))]
#[cfg_attr(feature = "validate", derive(garde::Validate))]
#[cfg_attr(feature = "validate", garde(allow_unvalidated))]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct Zaehlwerk {
#[cfg_attr(feature = "serde", serde(rename = "anzahlAblesungen"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub anzahl_ablesungen: Option<i64>,
#[cfg_attr(feature = "serde", serde(rename = "bezeichnung"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub bezeichnung: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "einheit"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub einheit: Option<Mengeneinheit>,
#[cfg_attr(feature = "serde", serde(rename = "_id"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub id: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "istAbrechnungsrelevant"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub ist_abrechnungsrelevant: Option<bool>,
#[cfg_attr(feature = "serde", serde(rename = "istSchwachlastfaehig"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub ist_schwachlastfaehig: Option<bool>,
#[cfg_attr(feature = "serde", serde(rename = "istSteuerbefreit"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub ist_steuerbefreit: Option<bool>,
#[cfg_attr(feature = "serde", serde(rename = "istUnterbrechbar"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub ist_unterbrechbar: Option<bool>,
#[cfg_attr(feature = "serde", serde(rename = "konzessionsabgabe"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub konzessionsabgabe: Option<Konzessionsabgabe>,
#[cfg_attr(feature = "serde", serde(rename = "nachkommastelle"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub nachkommastelle: Option<i64>,
#[cfg_attr(feature = "serde", serde(rename = "obisKennzahl"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
#[cfg_attr(feature = "validate", garde(dive))]
pub obis_kennzahl: Option<crate::identifiers::ObisCode>,
#[cfg_attr(feature = "serde", serde(rename = "richtung"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub richtung: Option<Energierichtung>,
#[cfg_attr(feature = "serde", serde(rename = "_typ"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub typ: Option<ComTyp>,
#[cfg_attr(feature = "serde", serde(rename = "verbrauchsart"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub verbrauchsart: Option<Verbrauchsart>,
#[cfg_attr(feature = "serde", serde(rename = "_version"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub version: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "verwendungszwecke"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub verwendungszwecke: Option<Vec<VerwendungszweckProMarktrolle>>,
#[cfg_attr(feature = "serde", serde(rename = "vorkommastelle"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub vorkommastelle: Option<i64>,
#[cfg_attr(feature = "serde", serde(rename = "waermenutzung"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub waermenutzung: Option<Waermenutzung>,
#[cfg_attr(feature = "serde", serde(rename = "wandlerfaktor"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
#[cfg(feature = "decimal")]
pub wandlerfaktor: Option<rust_decimal::Decimal>,
#[cfg_attr(feature = "serde", serde(rename = "wandlerfaktor"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
#[cfg(not(feature = "decimal"))]
pub wandlerfaktor: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "zaehlwerkId"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub zaehlwerk_id: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "zaehlzeitregister"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub zaehlzeitregister: Option<Zaehlzeitregister>,
#[cfg_attr(feature = "serde", serde(rename = "zusatzAttribute"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(strip_option)))]
pub zusatz_attribute: Option<Vec<ZusatzAttribut>>,
#[cfg_attr(feature = "json", serde(flatten))]
#[cfg_attr(
feature = "json",
serde(skip_serializing_if = "crate::json::ext_map_is_empty")
)]
#[cfg_attr(not(feature = "json"), serde(skip))]
#[cfg_attr(feature = "builder", builder(default, setter(skip)))]
pub(crate) _additional: crate::LimitedExtensionMap,
}
#[cfg(feature = "json")]
impl crate::json::sealed::Sealed for Zaehlwerk {}
#[cfg(feature = "json")]
impl crate::json::Bo4eJsonExt for Zaehlwerk {}
#[cfg(feature = "json")]
impl crate::json::Bo4eExtensionData for Zaehlwerk {
fn extension_data(&self) -> &indexmap::IndexMap<String, serde_json::Value> {
self._additional
.as_map()
.unwrap_or(&crate::json::extension::EMPTY_EXTENSION_MAP)
}
fn has_extension_data(&self) -> bool {
!self._additional.is_empty()
}
}
#[cfg(feature = "json")]
impl std::fmt::Display for Zaehlwerk {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match serde_json::to_string(self) {
Ok(json) => f.write_str(&json),
Err(e) => write!(f, "<Zaehlwerk: serialization error: {e}>"),
}
}
}