openscenario-rs 0.3.0

Rust library for parsing and manipulating OpenSCENARIO files
Documentation
//! Condition type module for trigger and event management
//!
//! This file contains:
//! - Base condition traits and common condition behaviors
//! - Condition evaluation logic and state management
//! - Trigger edge detection (rising, falling, rising-or-falling)
//! - Condition group logic (AND/OR combinations)
//! - Condition validation and constraint checking
//!
use crate::types::enums::ConditionEdge;

pub mod entity; // Entity-based conditions
pub mod spatial; // Spatial conditions
pub mod value; // Value-based conditions

// Re-export spatial conditions for convenience
pub use spatial::{DistanceCondition, ReachPositionCondition, RelativeDistanceCondition};

// Keep entity-specific re-exports
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};

// Define base condition enum for polymorphic handling
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Condition {
    SimulationTime(SimulationTimeCondition),
    Speed(SpeedCondition),
}

// Define condition wrapper with common attributes
#[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,
}