use super::plan::StepKind;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StepProgressEvent {
Started,
Skipped,
Completed,
Failed,
}
#[derive(Debug, Clone)]
pub struct StepProgress {
pub event: StepProgressEvent,
pub instance: String,
pub step_id: String,
pub step_kind: StepKind,
pub node: String,
pub index: usize,
pub total: usize,
pub code: Option<&'static str>,
pub at_epoch_ms: i64,
pub duration_ms: Option<u64>,
}
pub trait ProgressSink {
fn on_step(&mut self, progress: StepProgress);
}
#[derive(Debug, Default)]
pub struct NullProgress;
impl ProgressSink for NullProgress {
fn on_step(&mut self, _progress: StepProgress) {}
}
pub fn epoch_ms() -> i64 {
std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.map(|d| d.as_millis() as i64)
.unwrap_or(0)
}