use super::{
AufAbschlagRegional, Bo4eObject, BoTyp, Energiemix, Kundentyp, Marktteilnehmer, Preisgarantie,
Registeranzahl, Sparte, Tarifberechnungsparameter, Tarifeinschraenkung, Tarifmerkmal,
TarifpreispositionProOrt, Tariftyp, Vertragskonditionen, Zeitraum, ZusatzAttribut,
};
#[derive(Debug, Clone, PartialEq)]
#[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 Tarif {
#[cfg_attr(feature = "serde", serde(rename = "anbieter"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub anbieter: Option<Box<Marktteilnehmer>>,
#[cfg_attr(feature = "serde", serde(rename = "anbietername"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub anbietername: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "anwendungVon"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub anwendung_von: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "bemerkung"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub bemerkung: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "berechnungsparameter"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub berechnungsparameter: Option<Tarifberechnungsparameter>,
#[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(into)))]
pub bezeichnung: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "energiemix"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub energiemix: Option<Energiemix>,
#[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(into)))]
pub id: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "kundentypen"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub kundentypen: Option<Vec<Kundentyp>>,
#[cfg_attr(feature = "serde", serde(rename = "preisgarantie"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub preisgarantie: Option<Preisgarantie>,
#[cfg_attr(feature = "serde", serde(rename = "preisstand"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub preisstand: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "registeranzahl"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub registeranzahl: Option<Registeranzahl>,
#[cfg_attr(feature = "serde", serde(rename = "sparte"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub sparte: Option<Sparte>,
#[cfg_attr(feature = "serde", serde(rename = "tarifAufAbschlaege"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub tarif_auf_abschlaege: Option<Vec<AufAbschlagRegional>>,
#[cfg_attr(feature = "serde", serde(rename = "tarifeinschraenkung"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub tarifeinschraenkung: Option<Tarifeinschraenkung>,
#[cfg_attr(feature = "serde", serde(rename = "tarifmerkmale"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub tarifmerkmale: Option<Vec<Tarifmerkmal>>,
#[cfg_attr(feature = "serde", serde(rename = "tarifpreise"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub tarifpreise: Option<Vec<TarifpreispositionProOrt>>,
#[cfg_attr(feature = "serde", serde(rename = "tariftyp"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub tariftyp: Option<Tariftyp>,
#[cfg_attr(feature = "serde", serde(rename = "_typ"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default = Some(BoTyp::Tarif), setter(skip)))]
pub typ: Option<BoTyp>,
#[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(into)))]
pub version: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "vertragskonditionen"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub vertragskonditionen: Option<Vertragskonditionen>,
#[cfg_attr(feature = "serde", serde(rename = "website"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub website: Option<String>,
#[cfg_attr(feature = "serde", serde(rename = "zeitlicheGueltigkeit"))]
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
#[cfg_attr(feature = "builder", builder(default, setter(into)))]
pub zeitliche_gueltigkeit: Option<Zeitraum>,
#[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(into)))]
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)))]
#[doc(hidden)]
pub _additional: crate::LimitedExtensionMap,
}
impl Default for Tarif {
fn default() -> Self {
Self {
typ: Some(BoTyp::Tarif),
anbieter: Default::default(),
anbietername: Default::default(),
anwendung_von: Default::default(),
bemerkung: Default::default(),
berechnungsparameter: Default::default(),
bezeichnung: Default::default(),
energiemix: Default::default(),
id: Default::default(),
kundentypen: Default::default(),
preisgarantie: Default::default(),
preisstand: Default::default(),
registeranzahl: Default::default(),
sparte: Default::default(),
tarif_auf_abschlaege: Default::default(),
tarifeinschraenkung: Default::default(),
tarifmerkmale: Default::default(),
tarifpreise: Default::default(),
tariftyp: Default::default(),
version: Default::default(),
vertragskonditionen: Default::default(),
website: Default::default(),
zeitliche_gueltigkeit: Default::default(),
zusatz_attribute: Default::default(),
_additional: Default::default(),
}
}
}
impl Bo4eObject for Tarif {
type BoTyp = BoTyp;
fn bo_type(&self) -> BoTyp {
self.typ.unwrap_or(BoTyp::Tarif)
}
fn schema_version(&self) -> &'static str {
"v202501.0.0"
}
}
#[cfg(feature = "json")]
impl crate::json::sealed::Sealed for Tarif {}
#[cfg(feature = "json")]
impl crate::json::Bo4eJsonExt for Tarif {}
#[cfg(feature = "json")]
impl crate::json::Bo4eExtensionData for Tarif {
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 Tarif {
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, "<Tarif: serialization error: {e}>"),
}
}
}