hafas_rs/parse/
load_factor.rs1use crate::LoadFactor;
2use crate::ParseResult;
3use crate::Profile;
4use crate::TariffClass;
5use serde::Deserialize;
6
7#[derive(Debug, Clone, Deserialize)]
8#[serde(rename_all = "UPPERCASE")]
9pub enum HafasTariffClass {
10 First,
11 Second,
12}
13
14impl From<HafasTariffClass> for TariffClass {
15 fn from(h: HafasTariffClass) -> TariffClass {
16 match h {
17 HafasTariffClass::First => TariffClass::First,
18 HafasTariffClass::Second => TariffClass::Second,
19 }
20 }
21}
22
23pub type HafasLoadFactor = u8;
24
25#[derive(Debug, Clone, Deserialize)]
26pub struct HafasLoadFactorEntry {
27 c: HafasTariffClass,
28 r: HafasLoadFactor,
29}
30
31#[derive(Debug, Clone)]
32pub struct LoadFactorEntry {
33 pub class: TariffClass,
34 pub load: LoadFactor,
35}
36
37pub fn default_parse_load_factor_entry<P: Profile + ?Sized>(
38 profile: &P,
39 h: HafasLoadFactorEntry,
40) -> ParseResult<LoadFactorEntry> {
41 Ok(LoadFactorEntry {
42 class: h.c.into(),
43 load: profile.parse_load_factor(h.r)?,
44 })
45}
46
47pub fn default_parse_load_factor(h: HafasLoadFactor) -> ParseResult<LoadFactor> {
48 match h {
49 1 => Ok(LoadFactor::LowToMedium),
50 2 => Ok(LoadFactor::High),
51 3 => Ok(LoadFactor::VeryHigh),
52 4 => Ok(LoadFactor::ExceptionallyHigh),
53 _ => Err(format!("Invalid load factor: {}", h).into()),
54 }
55}