use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[non_exhaustive]
pub enum SurchargeTarget {
#[serde(rename = "ARBEITSPREIS_EINTARIF")]
WorkingPriceSingleTariff,
#[serde(rename = "ARBEITSPREIS_HT")]
WorkingPriceHT,
#[serde(rename = "ARBEITSPREIS_NT")]
WorkingPriceNT,
#[serde(rename = "ARBEITSPREIS_HT_NT")]
WorkingPriceHTNT,
#[serde(rename = "GRUNDPREIS")]
BasePrice,
#[serde(rename = "GESAMTPREIS")]
TotalPrice,
}
impl SurchargeTarget {
pub fn german_name(&self) -> &'static str {
match self {
Self::WorkingPriceSingleTariff => "Auf-/Abschlag auf den Arbeitspreis Eintarif",
Self::WorkingPriceHT => "Auf-/Abschlag auf den Arbeitspreis HT",
Self::WorkingPriceNT => "Auf-/Abschlag auf den Arbeitspreis NT",
Self::WorkingPriceHTNT => "Auf-/Abschlag auf den Arbeitspreis HT und NT",
Self::BasePrice => "Auf-/Abschlag auf den Grundpreis",
Self::TotalPrice => "Auf-/Abschlag auf den Gesamtpreis",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
assert_eq!(
serde_json::to_string(&SurchargeTarget::BasePrice).unwrap(),
r#""GRUNDPREIS""#
);
assert_eq!(
serde_json::to_string(&SurchargeTarget::TotalPrice).unwrap(),
r#""GESAMTPREIS""#
);
}
#[test]
fn test_roundtrip() {
for target in [
SurchargeTarget::WorkingPriceSingleTariff,
SurchargeTarget::WorkingPriceHT,
SurchargeTarget::WorkingPriceNT,
SurchargeTarget::WorkingPriceHTNT,
SurchargeTarget::BasePrice,
SurchargeTarget::TotalPrice,
] {
let json = serde_json::to_string(&target).unwrap();
let parsed: SurchargeTarget = serde_json::from_str(&json).unwrap();
assert_eq!(target, parsed);
}
}
}