use crate::types::enums::ConditionEdge;
pub mod entity; pub mod spatial; pub mod value;
pub use spatial::{DistanceCondition, ReachPositionCondition, RelativeDistanceCondition};
pub use entity::{
AccelerationCondition, AngleCondition, ByEntityCondition, CollisionCondition, CollisionTarget,
EndOfRoadCondition, EntityCondition, OffroadCondition, RelativeAngleCondition,
RelativeClearanceCondition, RelativeLaneRange, RelativeSpeedCondition, SpeedCondition,
StandStillCondition, TimeHeadwayCondition, TimeToCollisionCondition, TimeToCollisionTarget,
TraveledDistanceCondition,
};
pub use value::{
ByValueCondition, ParameterCondition, SimulationTimeCondition, StoryboardElementStateCondition,
TimeOfDayCondition, TrafficSignalCondition, TrafficSignalControllerCondition,
UserDefinedValueCondition, VariableCondition,
};
use crate::types::basic::Double;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Condition {
SimulationTime(SimulationTimeCondition),
Speed(SpeedCondition),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConditionWrapper {
#[serde(rename = "@name")]
pub name: String,
#[serde(rename = "@conditionEdge")]
pub edge: ConditionEdge,
#[serde(rename = "@delay")]
pub delay: Double,
#[serde(flatten)]
pub condition: Condition,
}