use crate::types::basic::DateTime;
use crate::types::basic::{Double, OSString};
use crate::types::enums::{Rule, StoryboardElementState, StoryboardElementType};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct SimulationTimeCondition {
#[serde(rename = "@value")]
pub value: Double,
#[serde(rename = "@rule")]
pub rule: Rule,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct ParameterCondition {
#[serde(rename = "@parameterRef")]
pub parameter_ref: OSString,
#[serde(rename = "@rule")]
pub rule: Rule,
#[serde(rename = "@value")]
pub value: OSString,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct TimeOfDayCondition {
#[serde(rename = "@dateTime")]
pub date_time: DateTime,
#[serde(rename = "@rule")]
pub rule: Rule,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct StoryboardElementStateCondition {
#[serde(rename = "@storyboardElementRef")]
pub storyboard_element_ref: OSString,
#[serde(rename = "@state")]
pub state: StoryboardElementState,
#[serde(rename = "@storyboardElementType")]
pub storyboard_element_type: StoryboardElementType,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct UserDefinedValueCondition {
#[serde(rename = "@name")]
pub name: OSString,
#[serde(rename = "@rule")]
pub rule: Rule,
#[serde(rename = "@value")]
pub value: OSString,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct TrafficSignalCondition {
#[serde(rename = "@name")]
pub name: OSString,
#[serde(rename = "@state")]
pub state: OSString,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct TrafficSignalControllerCondition {
#[serde(rename = "@trafficSignalControllerRef")]
pub traffic_signal_controller_ref: OSString,
#[serde(rename = "@phase")]
pub phase: OSString,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct VariableCondition {
#[serde(rename = "@variableRef")]
pub variable_ref: OSString,
#[serde(rename = "@rule")]
pub rule: Rule,
#[serde(rename = "@value")]
pub value: OSString,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct ByValueCondition {
#[serde(rename = "ParameterCondition", skip_serializing_if = "Option::is_none")]
pub parameter_condition: Option<ParameterCondition>,
#[serde(rename = "TimeOfDayCondition", skip_serializing_if = "Option::is_none")]
pub time_of_day_condition: Option<TimeOfDayCondition>,
#[serde(
rename = "SimulationTimeCondition",
skip_serializing_if = "Option::is_none"
)]
pub simulation_time_condition: Option<SimulationTimeCondition>,
#[serde(
rename = "StoryboardElementStateCondition",
skip_serializing_if = "Option::is_none"
)]
pub storyboard_element_state_condition: Option<StoryboardElementStateCondition>,
#[serde(
rename = "UserDefinedValueCondition",
skip_serializing_if = "Option::is_none"
)]
pub user_defined_value_condition: Option<UserDefinedValueCondition>,
#[serde(
rename = "TrafficSignalCondition",
skip_serializing_if = "Option::is_none"
)]
pub traffic_signal_condition: Option<TrafficSignalCondition>,
#[serde(
rename = "TrafficSignalControllerCondition",
skip_serializing_if = "Option::is_none"
)]
pub traffic_signal_controller_condition: Option<TrafficSignalControllerCondition>,
#[serde(rename = "VariableCondition", skip_serializing_if = "Option::is_none")]
pub variable_condition: Option<VariableCondition>,
}
impl Default for SimulationTimeCondition {
fn default() -> Self {
Self {
value: Double::literal(10.0),
rule: Rule::GreaterThan,
}
}
}
impl Default for ParameterCondition {
fn default() -> Self {
Self {
parameter_ref: OSString::literal("defaultParam".to_string()),
rule: Rule::EqualTo,
value: OSString::literal("defaultValue".to_string()),
}
}
}
impl Default for TimeOfDayCondition {
fn default() -> Self {
Self {
date_time: DateTime::literal(chrono::Utc::now()),
rule: Rule::GreaterThan,
}
}
}
impl Default for StoryboardElementStateCondition {
fn default() -> Self {
Self {
storyboard_element_ref: OSString::literal("defaultElement".to_string()),
state: StoryboardElementState::RunningState,
storyboard_element_type: StoryboardElementType::Story,
}
}
}
impl Default for UserDefinedValueCondition {
fn default() -> Self {
Self {
name: OSString::literal("defaultCondition".to_string()),
rule: Rule::EqualTo,
value: OSString::literal("defaultValue".to_string()),
}
}
}
impl Default for TrafficSignalCondition {
fn default() -> Self {
Self {
name: OSString::literal("defaultSignal".to_string()),
state: OSString::literal("green".to_string()),
}
}
}
impl Default for TrafficSignalControllerCondition {
fn default() -> Self {
Self {
traffic_signal_controller_ref: OSString::literal("defaultController".to_string()),
phase: OSString::literal("phase1".to_string()),
}
}
}
impl Default for VariableCondition {
fn default() -> Self {
Self {
variable_ref: OSString::literal("defaultVariable".to_string()),
rule: Rule::EqualTo,
value: OSString::literal("defaultValue".to_string()),
}
}
}
impl Default for ByValueCondition {
fn default() -> Self {
Self {
parameter_condition: None,
time_of_day_condition: None,
simulation_time_condition: Some(SimulationTimeCondition::default()),
storyboard_element_state_condition: None,
user_defined_value_condition: None,
traffic_signal_condition: None,
traffic_signal_controller_condition: None,
variable_condition: None,
}
}
}