use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum TenderStatus {
#[serde(rename = "PHASE1")]
Phase1,
#[serde(rename = "PHASE2")]
Phase2,
#[serde(rename = "PHASE3")]
Phase3,
#[serde(rename = "PHASE4")]
Phase4,
}
impl TenderStatus {
pub fn german_name(&self) -> &'static str {
match self {
Self::Phase1 => "Teilnahmewettbewerb",
Self::Phase2 => "Angebotsphase",
Self::Phase3 => "Verhandlungsphase",
Self::Phase4 => "Zuschlagserteilung",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&TenderStatus::Phase1).unwrap(),
r#""PHASE1""#
);
assert_eq!(
serde_json::to_string(&TenderStatus::Phase4).unwrap(),
r#""PHASE4""#
);
}
#[test]
fn test_deserialize() {
assert_eq!(
serde_json::from_str::<TenderStatus>(r#""PHASE1""#).unwrap(),
TenderStatus::Phase1
);
assert_eq!(
serde_json::from_str::<TenderStatus>(r#""PHASE3""#).unwrap(),
TenderStatus::Phase3
);
}
#[test]
fn test_roundtrip() {
for status in [
TenderStatus::Phase1,
TenderStatus::Phase2,
TenderStatus::Phase3,
TenderStatus::Phase4,
] {
let json = serde_json::to_string(&status).unwrap();
let parsed: TenderStatus = serde_json::from_str(&json).unwrap();
assert_eq!(status, parsed);
}
}
}