use alloc::string::String;
use alloc::vec::Vec;
use crate::datamodel::Event;
use crate::session::Effect;
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TransitionRef {
pub source: String,
pub index: usize,
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum TraceInput {
Start {
sessionid: String,
},
Event(Event),
Cancel,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MicrostepTrace {
pub event: Option<String>,
pub transitions: Vec<TransitionRef>,
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MacrostepTrace {
pub index: u64,
pub input: TraceInput,
pub microsteps: Vec<MicrostepTrace>,
pub configuration: Vec<String>,
pub effects: Vec<Effect>,
pub terminated: bool,
}