bo4e_core/enums/
market_role.rs

1//! Market role (Marktrolle) enumeration.
2
3use serde::{Deserialize, Serialize};
4
5/// Role of a market participant in the energy market.
6///
7/// German: Marktrolle
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[non_exhaustive]
10pub enum MarketRole {
11    /// Technical resource operator (Betreiber einer technischen Ressource)
12    #[serde(rename = "BTR")]
13    TechnicalResourceOperator,
14
15    /// Balance coordinator / market area manager (Bilanzkoordinator / Marktgebietsverantwortlicher)
16    #[serde(rename = "BIKO")]
17    BalanceCoordinator,
18
19    /// Balance responsible party (Bilanzkreisverantwortlicher)
20    #[serde(rename = "BKV")]
21    BalanceResponsibleParty,
22
23    /// Data provider
24    #[serde(rename = "DP")]
25    DataProvider,
26
27    /// Deployment responsible (Einsatzverantwortlicher)
28    #[serde(rename = "EIV")]
29    DeploymentResponsible,
30
31    /// Energy service provider of connection user (Energieserviceanbieter des Anschlussnutzers)
32    #[serde(rename = "ESA")]
33    EnergyServiceProvider,
34
35    /// Capacity user (Kapazitaetsnutzer)
36    #[serde(rename = "KN")]
37    CapacityUser,
38
39    /// Supplier (Lieferant)
40    #[serde(rename = "LF")]
41    Supplier,
42
43    /// Market area manager (Marktgebietsverantwortlicher)
44    #[serde(rename = "MGV")]
45    MarketAreaManager,
46
47    /// Metering point operator (Messstellenbetreiber)
48    #[serde(rename = "MSB")]
49    MeteringPointOperator,
50
51    /// Network operator (Netzbetreiber)
52    #[serde(rename = "NB")]
53    NetworkOperator,
54
55    /// Register operator (Registerbetreiber)
56    #[serde(rename = "RB")]
57    RegisterOperator,
58
59    /// Transmission system operator (Uebertragungsnetzbetreiber)
60    #[serde(rename = "UENB")]
61    TransmissionSystemOperator,
62}
63
64impl MarketRole {
65    /// Returns the German name.
66    pub fn german_name(&self) -> &'static str {
67        match self {
68            Self::TechnicalResourceOperator => "Betreiber einer technischen Ressource",
69            Self::BalanceCoordinator => "Bilanzkoordinator",
70            Self::BalanceResponsibleParty => "Bilanzkreisverantwortlicher",
71            Self::DataProvider => "Data Provider",
72            Self::DeploymentResponsible => "Einsatzverantwortlicher",
73            Self::EnergyServiceProvider => "Energieserviceanbieter des Anschlussnutzers",
74            Self::CapacityUser => "Kapazitaetsnutzer",
75            Self::Supplier => "Lieferant",
76            Self::MarketAreaManager => "Marktgebietsverantwortlicher",
77            Self::MeteringPointOperator => "Messstellenbetreiber",
78            Self::NetworkOperator => "Netzbetreiber",
79            Self::RegisterOperator => "Registerbetreiber",
80            Self::TransmissionSystemOperator => "Uebertragungsnetzbetreiber",
81        }
82    }
83}
84
85#[cfg(test)]
86mod tests {
87    use super::*;
88
89    #[test]
90    fn test_serialize() {
91        assert_eq!(
92            serde_json::to_string(&MarketRole::NetworkOperator).unwrap(),
93            r#""NB""#
94        );
95        assert_eq!(
96            serde_json::to_string(&MarketRole::Supplier).unwrap(),
97            r#""LF""#
98        );
99    }
100
101    #[test]
102    fn test_deserialize() {
103        assert_eq!(
104            serde_json::from_str::<MarketRole>(r#""MSB""#).unwrap(),
105            MarketRole::MeteringPointOperator
106        );
107        assert_eq!(
108            serde_json::from_str::<MarketRole>(r#""BKV""#).unwrap(),
109            MarketRole::BalanceResponsibleParty
110        );
111    }
112
113    #[test]
114    fn test_roundtrip() {
115        for role in [
116            MarketRole::TechnicalResourceOperator,
117            MarketRole::BalanceCoordinator,
118            MarketRole::BalanceResponsibleParty,
119            MarketRole::DataProvider,
120            MarketRole::DeploymentResponsible,
121            MarketRole::EnergyServiceProvider,
122            MarketRole::CapacityUser,
123            MarketRole::Supplier,
124            MarketRole::MarketAreaManager,
125            MarketRole::MeteringPointOperator,
126            MarketRole::NetworkOperator,
127            MarketRole::RegisterOperator,
128            MarketRole::TransmissionSystemOperator,
129        ] {
130            let json = serde_json::to_string(&role).unwrap();
131            let parsed: MarketRole = serde_json::from_str(&json).unwrap();
132            assert_eq!(role, parsed);
133        }
134    }
135}