sbb_api/models/
results.rs

1use std::fmt::Formatter;
2
3use serde::{Deserialize, Serialize};
4use crate::models::verbindung::Verbindung;
5
6#[derive(Serialize, Deserialize, Debug)]
7#[serde(rename_all = "camelCase")]
8pub struct VerbindungenResults {
9    pub verbindungen: Vec<Verbindung>,
10    pub earlier_url: Option<String>,
11    pub late_url: Option<String>,
12    pub verbindung_preis_url: String,
13}
14
15impl std::fmt::Display for VerbindungenResults {
16    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
17        write!(f, "VerbindungenResults{{\n")?;
18        for verb in &self.verbindungen {
19            write!(f, "{},\n", verb)?;
20        }
21        write!(f, "earlier={:?}, late={:?}, preis={}",
22               self.earlier_url,
23               self.late_url,
24               self.verbindung_preis_url
25        )
26    }
27}
28
29#[cfg(test)]
30mod test {
31    use std::fs;
32
33    use crate::models::results::VerbindungenResults;
34
35    #[test]
36    fn parse_verbindungen_1() {
37        let f = fs::read("./resources/test/verbindungen-1.json")
38            .expect("File not found");
39
40        let vr: VerbindungenResults = serde_json::from_str(
41            std::str::from_utf8(&f)
42                .expect("Unable to parse file into string"))
43            .expect("Unable to decode from JSON");
44
45        assert_gt!(vr.verbindungen.len(), 0);
46    }
47
48    #[test]
49    fn parse_verbindungen_2() {
50        let f = fs::read("./resources/test/verbindungen-2.json")
51            .expect("File not found");
52
53        let vr: VerbindungenResults = serde_json::from_str(
54            std::str::from_utf8(&f)
55                .expect("Unable to parse file into string"))
56            .expect("Unable to decode from JSON");
57
58        assert_gt!(vr.verbindungen.len(), 0);
59    }
60
61    #[test]
62    fn parse_verbindungen_3() {
63        let f = fs::read("./resources/test/verbindungen-3.json")
64            .expect("File not found");
65
66        let vr: VerbindungenResults = serde_json::from_str(
67            std::str::from_utf8(&f)
68                .expect("Unable to parse file into string"))
69            .expect("Unable to decode from JSON");
70
71        assert_gt!(vr.verbindungen.len(), 0);
72
73        for v in vr.verbindungen {
74            println!("{}", v);
75        }
76    }
77
78    #[test]
79    fn parse_verbindungen_4() {
80        let f = fs::read("./resources/test/verbindungen-4.json")
81            .expect("File not found");
82
83        let vr: VerbindungenResults = serde_json::from_str(
84            std::str::from_utf8(&f)
85                .expect("Unable to parse file into string"))
86            .expect("Unable to decode from JSON");
87
88        assert_gt!(vr.verbindungen.len(), 0);
89
90        for v in vr.verbindungen {
91            println!("{}", v);
92        }
93    }
94
95    #[test]
96    fn parse_verbindungen_5() {
97        let f = fs::read("./resources/test/verbindungen-5.json")
98            .expect("File not found");
99
100        let vr: VerbindungenResults = serde_json::from_str(
101            std::str::from_utf8(&f)
102                .expect("Unable to parse file into string"))
103            .expect("Unable to decode from JSON");
104
105        assert_gt!(vr.verbindungen.len(), 0);
106        assert_eq!(vr.verbindungen[0].duration().as_secs(), (2 * 60 + 47) * 60);
107
108        for v in vr.verbindungen {
109            println!("{:?} {}", v.as_ref().duration(), v);
110        }
111    }
112}