Skip to main content

bo4e_core/enums/
business_partner_role.rs

1//! Business partner role (Geschaeftspartnerrolle) enumeration.
2
3use serde::{Deserialize, Serialize};
4
5/// Role of a business partner in the energy market.
6///
7/// These roles define the capacity in which a business partner operates.
8///
9/// German: Geschaeftspartnerrolle
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
11#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
12#[cfg_attr(feature = "json-schema", schemars(rename = "Geschaeftspartnerrolle"))]
13#[non_exhaustive]
14pub enum BusinessPartnerRole {
15    /// Supplier (Lieferant)
16    #[serde(rename = "LIEFERANT")]
17    Supplier,
18
19    /// Service provider (Dienstleister)
20    #[serde(rename = "DIENSTLEISTER")]
21    ServiceProvider,
22
23    /// Customer (Kunde)
24    #[serde(rename = "KUNDE")]
25    Customer,
26
27    /// Interested party (Interessent)
28    #[serde(rename = "INTERESSENT")]
29    InterestedParty,
30
31    /// Market partner (Marktpartner)
32    #[serde(rename = "MARKTPARTNER")]
33    MarketPartner,
34
35    /// Network operator (Netzbetreiber)
36    #[serde(rename = "NETZBETREIBER")]
37    NetworkOperator,
38}
39
40impl BusinessPartnerRole {
41    /// Returns the German name.
42    pub fn german_name(&self) -> &'static str {
43        match self {
44            Self::Supplier => "Lieferant",
45            Self::ServiceProvider => "Dienstleister",
46            Self::Customer => "Kunde",
47            Self::InterestedParty => "Interessent",
48            Self::MarketPartner => "Marktpartner",
49            Self::NetworkOperator => "Netzbetreiber",
50        }
51    }
52}
53
54#[cfg(test)]
55mod tests {
56    use super::*;
57
58    #[test]
59    fn test_serialize() {
60        assert_eq!(
61            serde_json::to_string(&BusinessPartnerRole::Supplier).unwrap(),
62            r#""LIEFERANT""#
63        );
64        assert_eq!(
65            serde_json::to_string(&BusinessPartnerRole::Customer).unwrap(),
66            r#""KUNDE""#
67        );
68    }
69
70    #[test]
71    fn test_deserialize() {
72        assert_eq!(
73            serde_json::from_str::<BusinessPartnerRole>(r#""LIEFERANT""#).unwrap(),
74            BusinessPartnerRole::Supplier
75        );
76        assert_eq!(
77            serde_json::from_str::<BusinessPartnerRole>(r#""DIENSTLEISTER""#).unwrap(),
78            BusinessPartnerRole::ServiceProvider
79        );
80    }
81
82    #[test]
83    fn test_roundtrip() {
84        for role in [
85            BusinessPartnerRole::Supplier,
86            BusinessPartnerRole::ServiceProvider,
87            BusinessPartnerRole::Customer,
88            BusinessPartnerRole::InterestedParty,
89            BusinessPartnerRole::MarketPartner,
90            BusinessPartnerRole::NetworkOperator,
91        ] {
92            let json = serde_json::to_string(&role).unwrap();
93            let parsed: BusinessPartnerRole = serde_json::from_str(&json).unwrap();
94            assert_eq!(role, parsed);
95        }
96    }
97}