use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum MarketRole {
#[serde(rename = "BTR")]
TechnicalResourceOperator,
#[serde(rename = "BIKO")]
BalanceCoordinator,
#[serde(rename = "BKV")]
BalanceResponsibleParty,
#[serde(rename = "DP")]
DataProvider,
#[serde(rename = "EIV")]
DeploymentResponsible,
#[serde(rename = "ESA")]
EnergyServiceProvider,
#[serde(rename = "KN")]
CapacityUser,
#[serde(rename = "LF")]
Supplier,
#[serde(rename = "MGV")]
MarketAreaManager,
#[serde(rename = "MSB")]
MeteringPointOperator,
#[serde(rename = "NB")]
NetworkOperator,
#[serde(rename = "RB")]
RegisterOperator,
#[serde(rename = "UENB")]
TransmissionSystemOperator,
}
impl MarketRole {
pub fn german_name(&self) -> &'static str {
match self {
Self::TechnicalResourceOperator => "Betreiber einer technischen Ressource",
Self::BalanceCoordinator => "Bilanzkoordinator",
Self::BalanceResponsibleParty => "Bilanzkreisverantwortlicher",
Self::DataProvider => "Data Provider",
Self::DeploymentResponsible => "Einsatzverantwortlicher",
Self::EnergyServiceProvider => "Energieserviceanbieter des Anschlussnutzers",
Self::CapacityUser => "Kapazitaetsnutzer",
Self::Supplier => "Lieferant",
Self::MarketAreaManager => "Marktgebietsverantwortlicher",
Self::MeteringPointOperator => "Messstellenbetreiber",
Self::NetworkOperator => "Netzbetreiber",
Self::RegisterOperator => "Registerbetreiber",
Self::TransmissionSystemOperator => "Uebertragungsnetzbetreiber",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&MarketRole::NetworkOperator).unwrap(),
r#""NB""#
);
assert_eq!(
serde_json::to_string(&MarketRole::Supplier).unwrap(),
r#""LF""#
);
}
#[test]
fn test_deserialize() {
assert_eq!(
serde_json::from_str::<MarketRole>(r#""MSB""#).unwrap(),
MarketRole::MeteringPointOperator
);
assert_eq!(
serde_json::from_str::<MarketRole>(r#""BKV""#).unwrap(),
MarketRole::BalanceResponsibleParty
);
}
#[test]
fn test_roundtrip() {
for role in [
MarketRole::TechnicalResourceOperator,
MarketRole::BalanceCoordinator,
MarketRole::BalanceResponsibleParty,
MarketRole::DataProvider,
MarketRole::DeploymentResponsible,
MarketRole::EnergyServiceProvider,
MarketRole::CapacityUser,
MarketRole::Supplier,
MarketRole::MarketAreaManager,
MarketRole::MeteringPointOperator,
MarketRole::NetworkOperator,
MarketRole::RegisterOperator,
MarketRole::TransmissionSystemOperator,
] {
let json = serde_json::to_string(&role).unwrap();
let parsed: MarketRole = serde_json::from_str(&json).unwrap();
assert_eq!(role, parsed);
}
}
}