1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
use thiserror::Error;

use enum_index_derive::{IndexEnum};
use variant_count::VariantCount;

mod random_grund;

pub fn get_grund() -> Grund {
    rand::random()
}

#[non_exhaustive]
#[derive(Debug, Error, VariantCount, IndexEnum)]
pub enum Grund {
    #[error("Fahrt faellt aus")]
    FahrtFaelltAus,

    #[error("Fährt heute nur bis {0}")]
    FaehrtHeuteNurBis(String),

    #[error("Verzögerungen im Betriebsablauf")]
    VerzoegerungenImBetriebsablauf,

    #[error("Gleiswechsel")]
    Gleiswechsel,

    #[error("Fahrt fällt aus, es verkehrt Ersatzfahrt {0}")]
    FahrtFaelltAusMitErsatzfahrt(String),

    #[error("Technische Störungen am Zug")]
    TechnischeStoerungenAmZug,

    #[error("Verspätung eines vorausfahrenden Zuges")]
    VerspaetungEinesVorausfahrendenZuges,

    #[error("Verspätete Bereitstellung des Zuges")]
    VerspaeteteBereitstellungDesZuges,

    #[error("Bauarbeiten")]
    Bauarbeiten,

    #[error("Witterungsbedingte Störung")]
    WitterungsbedingteStoerung,

    #[error("Weichenstörung")]
    WeichenStoerung,

    #[error("Änderung im Fahrtverlauf")]
    AenderungImFahrtverlauf,

    #[error("Unwetter")]
    Unwetter,
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn bauarbeiten() {
        let formatted = format!("Grund: {}", Grund::Bauarbeiten);
        assert_eq!("Grund: Bauarbeiten", formatted);
    }

    #[test]
    fn get_random_grund() {
        println!("Grund: {}", get_grund());
    }
}