bo4e_core/enums/
tender_status.rs

1//! Tender status (Ausschreibungsstatus) enumeration.
2
3use serde::{Deserialize, Serialize};
4
5/// Status/phase of a tender process.
6///
7/// German: Ausschreibungsstatus
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
9#[non_exhaustive]
10pub enum TenderStatus {
11    /// Phase 1: Participation competition (Teilnahmewettbewerb)
12    #[serde(rename = "PHASE1")]
13    Phase1,
14
15    /// Phase 2: Offer phase (Angebotsphase)
16    #[serde(rename = "PHASE2")]
17    Phase2,
18
19    /// Phase 3: Negotiation phase (Verhandlungsphase)
20    #[serde(rename = "PHASE3")]
21    Phase3,
22
23    /// Phase 4: Contract award (Zuschlagserteilung)
24    #[serde(rename = "PHASE4")]
25    Phase4,
26}
27
28impl TenderStatus {
29    /// Returns the German name.
30    pub fn german_name(&self) -> &'static str {
31        match self {
32            Self::Phase1 => "Teilnahmewettbewerb",
33            Self::Phase2 => "Angebotsphase",
34            Self::Phase3 => "Verhandlungsphase",
35            Self::Phase4 => "Zuschlagserteilung",
36        }
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use super::*;
43
44    #[test]
45    fn test_serialize() {
46        assert_eq!(
47            serde_json::to_string(&TenderStatus::Phase1).unwrap(),
48            r#""PHASE1""#
49        );
50        assert_eq!(
51            serde_json::to_string(&TenderStatus::Phase4).unwrap(),
52            r#""PHASE4""#
53        );
54    }
55
56    #[test]
57    fn test_deserialize() {
58        assert_eq!(
59            serde_json::from_str::<TenderStatus>(r#""PHASE1""#).unwrap(),
60            TenderStatus::Phase1
61        );
62        assert_eq!(
63            serde_json::from_str::<TenderStatus>(r#""PHASE3""#).unwrap(),
64            TenderStatus::Phase3
65        );
66    }
67
68    #[test]
69    fn test_roundtrip() {
70        for status in [
71            TenderStatus::Phase1,
72            TenderStatus::Phase2,
73            TenderStatus::Phase3,
74            TenderStatus::Phase4,
75        ] {
76            let json = serde_json::to_string(&status).unwrap();
77            let parsed: TenderStatus = serde_json::from_str(&json).unwrap();
78            assert_eq!(status, parsed);
79        }
80    }
81}