use super::*;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscreteEvent {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
pub trigger: DiscreteEventTrigger,
#[serde(skip_serializing_if = "Option::is_none")]
pub affects: Option<Vec<AffectEquation>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reinitialize: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
#[allow(clippy::large_enum_variant)]
pub enum DiscreteEventTrigger {
Condition { expression: Expr },
Periodic {
interval: f64,
#[serde(skip_serializing_if = "Option::is_none")]
initial_offset: Option<f64>,
},
PresetTimes {
times: Vec<f64>,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AffectEquation {
pub lhs: String,
pub rhs: Expr,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ContinuousEvent {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
pub conditions: Vec<Expr>,
pub affects: Vec<AffectEquation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub affect_neg: Option<Vec<AffectEquation>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub root_find: Option<RootFindDirection>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reinitialize: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum RootFindDirection {
Left,
Right,
}