use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
#[cfg_attr(feature = "json-schema", schemars(rename = "Geschaeftspartnerrolle"))]
#[non_exhaustive]
pub enum BusinessPartnerRole {
#[serde(rename = "LIEFERANT")]
Supplier,
#[serde(rename = "DIENSTLEISTER")]
ServiceProvider,
#[serde(rename = "KUNDE")]
Customer,
#[serde(rename = "INTERESSENT")]
InterestedParty,
#[serde(rename = "MARKTPARTNER")]
MarketPartner,
#[serde(rename = "NETZBETREIBER")]
NetworkOperator,
}
impl BusinessPartnerRole {
pub fn german_name(&self) -> &'static str {
match self {
Self::Supplier => "Lieferant",
Self::ServiceProvider => "Dienstleister",
Self::Customer => "Kunde",
Self::InterestedParty => "Interessent",
Self::MarketPartner => "Marktpartner",
Self::NetworkOperator => "Netzbetreiber",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&BusinessPartnerRole::Supplier).unwrap(),
r#""LIEFERANT""#
);
assert_eq!(
serde_json::to_string(&BusinessPartnerRole::Customer).unwrap(),
r#""KUNDE""#
);
}
#[test]
fn test_deserialize() {
assert_eq!(
serde_json::from_str::<BusinessPartnerRole>(r#""LIEFERANT""#).unwrap(),
BusinessPartnerRole::Supplier
);
assert_eq!(
serde_json::from_str::<BusinessPartnerRole>(r#""DIENSTLEISTER""#).unwrap(),
BusinessPartnerRole::ServiceProvider
);
}
#[test]
fn test_roundtrip() {
for role in [
BusinessPartnerRole::Supplier,
BusinessPartnerRole::ServiceProvider,
BusinessPartnerRole::Customer,
BusinessPartnerRole::InterestedParty,
BusinessPartnerRole::MarketPartner,
BusinessPartnerRole::NetworkOperator,
] {
let json = serde_json::to_string(&role).unwrap();
let parsed: BusinessPartnerRole = serde_json::from_str(&json).unwrap();
assert_eq!(role, parsed);
}
}
}