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
use hrdf_parser::{DataStorage, Model};

use super::models::RouteResult;

impl RouteResult {
    #[rustfmt::skip]
    pub fn print(&self, data_storage: &DataStorage) {
        for section in self.sections() {
            let journey = section.journey(data_storage);

            if journey.is_none() {
                let stop = data_storage.stops().find(section.arrival_stop_id());
                println!("Approx. {}-minute walk to {}", section.duration().unwrap(), stop.name());
                continue;
            }

            let journey = journey.unwrap();
            println!("Journey #{}", journey.id());

            let mut route_iter = journey.route().into_iter().peekable();

            while route_iter.peek().unwrap().stop_id() != section.departure_stop_id() {
                route_iter.next();
            }

            let mut route = Vec::new();

            loop {
                route.push(route_iter.next().unwrap());

                if route.last().unwrap().stop_id() == section.arrival_stop_id() {
                    break;
                }
            }

            println!("  Departure at: {}", section.departure_at().unwrap().format("%Y-%m-%d %H:%M"));

            for (i, route_entry) in route.iter().enumerate() {
                let arrival_time = if i == 0 {
                    " ".repeat(5)
                } else {
                    format!("{}", route_entry.arrival_time().as_ref().unwrap().format("%H:%M"))
                };

                let departure_time = if i == route.len() - 1 {
                    " ".repeat(5)
                } else {
                    format!("{}", route_entry.departure_time().as_ref().unwrap().format("%H:%M"))
                };

                let stop = route_entry.stop(data_storage);

                println!(
                    "    {:0>7} {: <36} {} - {}",
                    stop.id(),
                    stop.name(),
                    arrival_time,
                    departure_time,
                );
            }

            println!("  Arrival at: {}", section.arrival_at().unwrap().format("%Y-%m-%d %H:%M"));
        }
    }
}