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#[non_exhaustive]
12pub enum BusinessPartnerRole {
13    /// Supplier (Lieferant)
14    #[serde(rename = "LIEFERANT")]
15    Supplier,
16
17    /// Service provider (Dienstleister)
18    #[serde(rename = "DIENSTLEISTER")]
19    ServiceProvider,
20
21    /// Customer (Kunde)
22    #[serde(rename = "KUNDE")]
23    Customer,
24
25    /// Interested party (Interessent)
26    #[serde(rename = "INTERESSENT")]
27    InterestedParty,
28
29    /// Market partner (Marktpartner)
30    #[serde(rename = "MARKTPARTNER")]
31    MarketPartner,
32
33    /// Network operator (Netzbetreiber)
34    #[serde(rename = "NETZBETREIBER")]
35    NetworkOperator,
36}
37
38impl BusinessPartnerRole {
39    /// Returns the German name.
40    pub fn german_name(&self) -> &'static str {
41        match self {
42            Self::Supplier => "Lieferant",
43            Self::ServiceProvider => "Dienstleister",
44            Self::Customer => "Kunde",
45            Self::InterestedParty => "Interessent",
46            Self::MarketPartner => "Marktpartner",
47            Self::NetworkOperator => "Netzbetreiber",
48        }
49    }
50}
51
52#[cfg(test)]
53mod tests {
54    use super::*;
55
56    #[test]
57    fn test_serialize() {
58        assert_eq!(
59            serde_json::to_string(&BusinessPartnerRole::Supplier).unwrap(),
60            r#""LIEFERANT""#
61        );
62        assert_eq!(
63            serde_json::to_string(&BusinessPartnerRole::Customer).unwrap(),
64            r#""KUNDE""#
65        );
66    }
67
68    #[test]
69    fn test_deserialize() {
70        assert_eq!(
71            serde_json::from_str::<BusinessPartnerRole>(r#""LIEFERANT""#).unwrap(),
72            BusinessPartnerRole::Supplier
73        );
74        assert_eq!(
75            serde_json::from_str::<BusinessPartnerRole>(r#""DIENSTLEISTER""#).unwrap(),
76            BusinessPartnerRole::ServiceProvider
77        );
78    }
79
80    #[test]
81    fn test_roundtrip() {
82        for role in [
83            BusinessPartnerRole::Supplier,
84            BusinessPartnerRole::ServiceProvider,
85            BusinessPartnerRole::Customer,
86            BusinessPartnerRole::InterestedParty,
87            BusinessPartnerRole::MarketPartner,
88            BusinessPartnerRole::NetworkOperator,
89        ] {
90            let json = serde_json::to_string(&role).unwrap();
91            let parsed: BusinessPartnerRole = serde_json::from_str(&json).unwrap();
92            assert_eq!(role, parsed);
93        }
94    }
95}