hrdf_routing_engine/routing/
display.rs

1use hrdf_parser::{DataStorage, Model};
2
3use crate::routing::models::Transport;
4
5use super::models::RouteResult;
6
7impl RouteResult {
8    #[rustfmt::skip]
9    pub fn print(&self, data_storage: &DataStorage) {
10        for section in self.sections() {
11            let journey = section.journey(data_storage);
12
13            if journey.is_none() {
14                let stop = data_storage.stops().find(section.arrival_stop_id()).unwrap_or_else(|| panic!("Stop {:?} not found.", section.arrival_stop_id()));
15                println!("Approx. {}-minute walk to {}", section.duration().unwrap(), stop.name());
16                continue;
17            }
18
19            let journey = journey.unwrap();
20            println!("Journey #{}", journey.id());
21            let transport_type = journey.transport_type(data_storage).unwrap();
22            println!("{:?}", Transport::from(transport_type));
23
24            let mut route_iter = journey.route().iter().peekable();
25
26
27            while route_iter.peek().unwrap().stop_id() != section.departure_stop_id() {
28                route_iter.next();
29            }
30
31            let mut route = Vec::new();
32
33            loop {
34                route.push(route_iter.next().unwrap());
35
36                if route.last().unwrap().stop_id() == section.arrival_stop_id() {
37                    break;
38                }
39            }
40
41            println!("  Departure at: {}", section.departure_at().unwrap().format("%Y-%m-%d %H:%M"));
42
43            for (i, route_entry) in route.iter().enumerate() {
44                let arrival_time = if i == 0 {
45                    " ".repeat(5)
46                } else {
47                    format!("{}", route_entry.arrival_time().as_ref().unwrap().format("%H:%M"))
48                };
49
50                let departure_time = if i == route.len() - 1 {
51                    " ".repeat(5)
52                } else {
53                    format!("{}", route_entry.departure_time().as_ref().unwrap().format("%H:%M"))
54                };
55
56                let stop = route_entry.stop(data_storage).expect("Stop not found for {route_entry:?}");
57
58                println!(
59                    "    {:0>7} {: <36} {} - {}",
60                    stop.id(),
61                    stop.name(),
62                    arrival_time,
63                    departure_time,
64                );
65            }
66
67            println!("  Arrival at: {}", section.arrival_at().unwrap().format("%Y-%m-%d %H:%M"));
68        }
69    }
70}