use std::{any::Any, collections::HashMap};
fn get_road_network_properties(xodr_path: &str) -> HashMap<&str, &str> {
HashMap::from([("road_geometry_id", "my_rg_from_rust"), ("opendrive_file", xodr_path)])
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
use maliput::api::{RoadNetwork, RoadNetworkBackend};
let invalid_xodr_path = "/hopefully/this/path/does/not/exist.xodr";
let road_network_properties = get_road_network_properties(invalid_xodr_path);
let road_network = RoadNetwork::new(RoadNetworkBackend::MaliputMalidrive, &road_network_properties);
assert!(
road_network.is_err(),
"Expected an error when creating RoadNetwork with an invalid xodr_path"
);
match road_network {
Ok(_) => panic!("Expected RoadNetwork creation to fail with an invalid xodr_path"),
Err(e) => {
assert!(
e.type_id() == std::any::TypeId::of::<maliput::common::MaliputError>(),
"Expected MaliputError, got: {:?}",
e.type_id()
);
if let maliput::common::MaliputError::AssertionError(_) = e {
} else {
panic!("Expected MaliputError::AssertionError, got: {:?}", e);
}
}
}
let package_location = std::env::var("CARGO_MANIFEST_DIR")?;
let xodr_path = format!("{}/data/xodr/TShapeRoad.xodr", package_location);
let road_network_properties = get_road_network_properties(xodr_path.as_str());
let road_network_result = RoadNetwork::new(RoadNetworkBackend::MaliputMalidrive, &road_network_properties);
assert!(
road_network_result.is_ok(),
"Expected RoadNetwork to be created successfully with a valid xodr_path"
);
let road_network = road_network_result.unwrap();
let road_geometry = road_network.road_geometry();
let lanes = road_geometry.get_lanes();
println!("Number of lanes: {}", lanes.len());
Ok(())
}