sbb_api/models/
results.rs1use 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}