// Auto-generated by automapper-generator. Do not edit.

#![allow(unused_imports)]

use serde::{Deserialize, Serialize};
use super::entities::*;

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pid35001MessageStammdaten {
    pub ansprechpartner: Option<Ansprechpartner>,
    pub marktteilnehmer: Option<MarktteilnehmerWrapped>,
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub marktteilnehmer_referenz: Option<Vec<MarktteilnehmerReferenz>>,
    pub nachricht: Option<Nachricht>,
    pub referenz: Option<Referenz>,
}

/// PID 35001: Anfrage Geräteübernahmeangebot
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pid35001TransaktionStammdaten {
    /// Required (Muss). Fields: positionsnummer
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub vorgang: Option<Vec<Vorgang>>,
}

impl Pid35001TransaktionStammdaten {
    /// Required entity fields for PID 35001 (Anfrage Geräteübernahmeangebot).
    ///
    /// Each entry is `(entity_field, required_bo4e_fields)`.
    pub fn required_fields() -> &'static [(&'static str, &'static [&'static str])] {
        &[
            ("vorgang", &["positionsnummer"]),
        ]
    }
}

pub type Pid35001Interchange = crate::model::Interchange<
    Pid35001MessageStammdaten,
    Pid35001TransaktionStammdaten,
>;

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pid35002MessageStammdaten {
    pub ansprechpartner: Option<Ansprechpartner>,
    pub marktteilnehmer: Option<MarktteilnehmerWrapped>,
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub marktteilnehmer_referenz: Option<Vec<MarktteilnehmerReferenz>>,
    pub nachricht: Option<Nachricht>,
    pub referenz: Option<Referenz>,
}

/// PID 35002: Anfrage Rechnungsabwicklung MSB über LF
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pid35002TransaktionStammdaten {
    /// Required (Muss). Fields: positionsnummer
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub vorgang: Option<Vec<Vorgang>>,
}

impl Pid35002TransaktionStammdaten {
    /// Required entity fields for PID 35002 (Anfrage Rechnungsabwicklung MSB über LF).
    ///
    /// Each entry is `(entity_field, required_bo4e_fields)`.
    pub fn required_fields() -> &'static [(&'static str, &'static [&'static str])] {
        &[
            ("vorgang", &["positionsnummer"]),
        ]
    }
}

pub type Pid35002Interchange = crate::model::Interchange<
    Pid35002MessageStammdaten,
    Pid35002TransaktionStammdaten,
>;

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pid35003MessageStammdaten {
    pub ansprechpartner: Option<Ansprechpartner>,
    pub marktteilnehmer: Option<MarktteilnehmerWrapped>,
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub marktteilnehmer_referenz: Option<Vec<MarktteilnehmerReferenz>>,
    pub nachricht: Option<Nachricht>,
    pub referenz: Option<Referenz>,
}

/// PID 35003: Anfrage von Werten
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pid35003TransaktionStammdaten {
    /// Required (Muss). Fields: handlungCode, issuerFreitext2, positionsnummer, produktIdentifikation.id, subjectFreitext2, zertifikatsaussteller, zertifikatsnutzer, zieladresseIpv4, zieladresseIpv6
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub vorgang: Option<Vec<Vorgang>>,
    /// Required (Muss). Fields: dimension, klassentyp, merkmal.code, obererSchwellwert, untererSchwellwert
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub vorgang_zuordnung: Option<Vec<VorgangZuordnung>>,
}

impl Pid35003TransaktionStammdaten {
    /// Required entity fields for PID 35003 (Anfrage von Werten).
    ///
    /// Each entry is `(entity_field, required_bo4e_fields)`.
    pub fn required_fields() -> &'static [(&'static str, &'static [&'static str])] {
        &[
            ("vorgang", &["handlungCode", "issuerFreitext2", "positionsnummer", "produktIdentifikation.id", "subjectFreitext2", "zertifikatsaussteller", "zertifikatsnutzer", "zieladresseIpv4", "zieladresseIpv6"]),
            ("vorgang_zuordnung", &["dimension", "klassentyp", "merkmal.code", "obererSchwellwert", "untererSchwellwert"]),
        ]
    }
}

pub type Pid35003Interchange = crate::model::Interchange<
    Pid35003MessageStammdaten,
    Pid35003TransaktionStammdaten,
>;

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pid35004MessageStammdaten {
    pub ansprechpartner: Option<Ansprechpartner>,
    pub marktteilnehmer: Option<MarktteilnehmerWrapped>,
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub marktteilnehmer_referenz: Option<Vec<MarktteilnehmerReferenz>>,
    pub nachricht: Option<Nachricht>,
    pub referenz: Option<Referenz>,
}

/// PID 35004: Anfrage einer Konfiguration
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pid35004TransaktionStammdaten {
    /// Required (Muss). Fields: handlungCode, issuerFreitext2, positionsnummer, produktIdentifikation.id, subjectFreitext2, zertifikatsaussteller, zertifikatsnutzer, zieladresseIpv4, zieladresseIpv6
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub vorgang: Option<Vec<Vorgang>>,
    /// Required (Muss). Fields: dimension, klassentyp, merkmal.code, obererSchwellwert, untererSchwellwert
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub vorgang_zuordnung: Option<Vec<VorgangZuordnung>>,
}

impl Pid35004TransaktionStammdaten {
    /// Required entity fields for PID 35004 (Anfrage einer Konfiguration).
    ///
    /// Each entry is `(entity_field, required_bo4e_fields)`.
    pub fn required_fields() -> &'static [(&'static str, &'static [&'static str])] {
        &[
            ("vorgang", &["handlungCode", "issuerFreitext2", "positionsnummer", "produktIdentifikation.id", "subjectFreitext2", "zertifikatsaussteller", "zertifikatsnutzer", "zieladresseIpv4", "zieladresseIpv6"]),
            ("vorgang_zuordnung", &["dimension", "klassentyp", "merkmal.code", "obererSchwellwert", "untererSchwellwert"]),
        ]
    }
}

pub type Pid35004Interchange = crate::model::Interchange<
    Pid35004MessageStammdaten,
    Pid35004TransaktionStammdaten,
>;

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pid35005MessageStammdaten {
    pub ansprechpartner: Option<Ansprechpartner>,
    pub marktteilnehmer: Option<MarktteilnehmerWrapped>,
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub marktteilnehmer_referenz: Option<Vec<MarktteilnehmerReferenz>>,
    pub nachricht: Option<Nachricht>,
    pub referenz: Option<Referenz>,
}

/// PID 35005: Anfrage Angebot Änderung Technik
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Pid35005TransaktionStammdaten {
    /// Required (Muss). Fields: handlungCode, positionsnummer, produktIdentifikation.id
    #[serde(default, deserialize_with = "crate::serde_helpers::deserialize_vec_or_single")]
    pub vorgang: Option<Vec<Vorgang>>,
}

impl Pid35005TransaktionStammdaten {
    /// Required entity fields for PID 35005 (Anfrage Angebot Änderung Technik).
    ///
    /// Each entry is `(entity_field, required_bo4e_fields)`.
    pub fn required_fields() -> &'static [(&'static str, &'static [&'static str])] {
        &[
            ("vorgang", &["handlungCode", "positionsnummer", "produktIdentifikation.id"]),
        ]
    }
}

pub type Pid35005Interchange = crate::model::Interchange<
    Pid35005MessageStammdaten,
    Pid35005TransaktionStammdaten,
>;

