hrdf_routing_engine/
lib.rs1mod debug;
2mod isochrone;
3mod routing;
4mod service;
5mod utils;
6
7use std::error::Error;
8
9use chrono::Duration;
10use hrdf_parser::Hrdf;
11pub use isochrone::compute_isochrones;
12pub use isochrone::IsochroneDisplayMode;
13pub use routing::find_reachable_stops_within_time_limit;
14pub use routing::plan_journey;
15pub use routing::Route;
16pub use routing::RouteSection;
17use utils::create_date_time;
18
19pub use debug::run_debug;
20pub use service::run_service;
21
22pub fn run_test(hrdf: Hrdf, display_mode: IsochroneDisplayMode) -> Result<(), Box<dyn Error>> {
23 let origin_point_latitude = 46.183870262988584;
24 let origin_point_longitude = 6.12213134765625;
25 let departure_at = create_date_time(2025, 4, 1, 8, 3);
26 let time_limit = Duration::minutes(480);
27 let isochrone_interval = Duration::minutes(80);
28 let verbose = true;
29
30 #[cfg(feature = "svg")]
31 let iso = compute_isochrones(
32 &hrdf,
33 origin_point_latitude,
34 origin_point_longitude,
35 departure_at,
36 time_limit,
37 isochrone_interval,
38 display_mode,
39 verbose,
40 );
41 #[cfg(not(feature = "svg"))]
42 let _iso = compute_isochrones(
43 &hrdf,
44 origin_point_latitude,
45 origin_point_longitude,
46 departure_at,
47 time_limit,
48 isochrone_interval,
49 display_mode,
50 verbose,
51 );
52
53 #[cfg(feature = "svg")]
54 iso.write_svg(&format!(
55 "isocrhones_{}_{}.svg",
56 time_limit.num_minutes(),
57 isochrone_interval.num_minutes()
58 ))?;
59
60 Ok(())
61}
62
63#[cfg(test)]
64mod tests {
65 use crate::debug::{test_find_reachable_stops_within_time_limit, test_plan_journey};
66
67 use hrdf_parser::{Hrdf, Version};
68 use test_log::test;
69
70 #[test(tokio::test)]
71 async fn debug() {
72 let hrdf = Hrdf::new(
73 Version::V_5_40_41_2_0_7,
74 "https://data.opentransportdata.swiss/en/dataset/timetable-54-2025-hrdf/permalink",
75 false,
76 None,
77 )
78 .await
79 .unwrap();
80
81 test_plan_journey(&hrdf);
82 test_find_reachable_stops_within_time_limit(&hrdf);
83 }
84}