use rust_decimal::Decimal;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, serde::Serialize)]
pub enum Druckstufe {
Hochdruck,
Mitteldruck,
Niederdruck,
}
impl Druckstufe {
#[must_use]
pub const fn label(self) -> &'static str {
match self {
Self::Hochdruck => "Hochdruck",
Self::Mitteldruck => "Mitteldruck",
Self::Niederdruck => "Niederdruck",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize)]
pub enum Kapazitaetsprodukt {
Fest,
Unterbrechbar,
}
impl Kapazitaetsprodukt {
#[must_use]
pub const fn label(self) -> &'static str {
match self {
Self::Fest => "feste Kapazität",
Self::Unterbrechbar => "unterbrechbare Kapazität",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize)]
pub struct GasKapazitaet {
pub bestellte_kapazitaet_kwh_h: Decimal,
pub entgelt_eur_per_kwh_h_a: Decimal,
pub produkt: Kapazitaetsprodukt,
pub druckstufe: Option<Druckstufe>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn druckstufen_order_and_label() {
assert!(Druckstufe::Hochdruck < Druckstufe::Niederdruck);
assert_eq!(Druckstufe::Mitteldruck.label(), "Mitteldruck");
assert_eq!(
Kapazitaetsprodukt::Unterbrechbar.label(),
"unterbrechbare Kapazität"
);
}
}