use maliput::api::rules::RuleType;
fn main() -> Result<(), Box<dyn std::error::Error>> {
use maliput::api::{RoadNetwork, RoadNetworkBackend};
use std::collections::HashMap;
let package_location = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let xodr_path = format!("{}/data/xodr/TShapeRoad.xodr", package_location);
let road_network_properties = HashMap::from([
("road_geometry_id", "my_rg_from_rust"),
("opendrive_file", xodr_path.as_str()),
("linear_tolerance", "0.01"),
("use_userdata_traffic_direction", "false"),
]);
let road_network = RoadNetwork::new(RoadNetworkBackend::MaliputMalidrive, &road_network_properties)?;
let rg = road_network.road_geometry();
let rulebook = road_network.rulebook();
let lanes = rg.get_lanes();
for lane in lanes {
let rule_type = RuleType::DirectionUsage;
let lane_id = lane.id();
let rule = rulebook.get_discrete_value_rule(&rule_type.get_rule_id(&lane_id));
if let Some(rule) = rule {
println!("Direction Usage Rule for lane {}:\n{:?}", lane_id, rule);
let states = rule.states();
assert!(
!states.is_empty(),
"No states found for Direction Usage Rule for lane {}",
lane_id
);
assert!(
states.len() == 1,
"Expected exactly one state for Direction Usage Rule for lane {}, found {}",
lane_id,
states.len()
);
let state = &states[0];
println!("\tState: {}\n", state.value());
} else {
println!("No Direction Usage Rule found for lane {}", lane_id);
panic!("Expected a Direction Usage Rule for lane {}", lane_id);
}
}
Ok(())
}