use openscenario_rs::types::{
basic::{Boolean, Double, OSString},
enums::{RelativeDistanceType, Rule},
positions::Position,
};
fn main() {
println!("🚗 Simple Spatial Conditions Demo");
println!("==================================\n");
println!("1. Reach Position Condition");
println!("---------------------------");
let reach_condition =
openscenario_rs::types::conditions::ReachPositionCondition::new(Position::default(), 2.0);
println!("✓ Created reach position condition");
println!(" Tolerance: {} meters", reach_condition.tolerance);
println!(
" Position: {:?}\n",
reach_condition.position.world_position.is_some()
);
println!("2. Distance Condition");
println!("--------------------");
let distance_condition = openscenario_rs::types::conditions::DistanceCondition {
position: Position::default(),
value: Double::literal(50.0),
freespace: Boolean::literal(true),
rule: Rule::LessThan,
along_route: None,
coordinate_system: None,
relative_distance_type: None,
routing_algorithm: None,
};
println!("✓ Created distance condition");
println!(" Distance threshold: {} meters", distance_condition.value);
println!(" Rule: {:?}", distance_condition.rule);
println!(" Freespace: {}\n", distance_condition.freespace);
println!("3. Relative Distance Condition");
println!("------------------------------");
let relative_condition = openscenario_rs::types::conditions::RelativeDistanceCondition {
entity_ref: OSString::literal("target_vehicle".to_string()),
value: Double::literal(20.0),
freespace: Boolean::literal(true),
relative_distance_type: RelativeDistanceType::Longitudinal,
rule: Rule::GreaterThan,
coordinate_system: None,
routing_algorithm: None,
};
println!("✓ Created relative distance condition");
println!(" Reference entity: {}", relative_condition.entity_ref);
println!(" Distance: {} meters", relative_condition.value);
println!(" Type: {:?}", relative_condition.relative_distance_type);
println!(" Rule: {:?}\n", relative_condition.rule);
println!("4. XML Serialization Test");
println!("-------------------------");
match quick_xml::se::to_string(&relative_condition) {
Ok(xml) => {
println!("✓ Successfully serialized to XML:");
println!("{}", xml);
}
Err(e) => {
println!("✗ Serialization failed: {}", e);
}
}
println!("\n🎯 Spatial conditions are working!");
println!(" - All three condition types can be created");
println!(" - XML serialization works correctly");
println!(" - Ready for integration with scenario logic");
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_demo_conditions_work() {
let _reach = openscenario_rs::types::conditions::ReachPositionCondition {
position: Position::default(),
tolerance: Double::literal(2.0),
};
let _distance = openscenario_rs::types::conditions::DistanceCondition {
position: Position::default(),
value: Double::literal(50.0),
freespace: Boolean::literal(true),
rule: Rule::LessThan,
along_route: None,
coordinate_system: None,
relative_distance_type: None,
routing_algorithm: None,
};
let _relative = openscenario_rs::types::conditions::RelativeDistanceCondition {
entity_ref: OSString::literal("target".to_string()),
value: Double::literal(20.0),
freespace: Boolean::literal(true),
relative_distance_type: RelativeDistanceType::Longitudinal,
rule: Rule::GreaterThan,
coordinate_system: None,
routing_algorithm: None,
};
assert!(true);
}
}