hrdf_routing_engine/
lib.rs

1mod 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}