use crate::app::BarrierOutcome;
use crate::node::NodePartial;
use crate::runtimes::session::{SessionState, StateVersions};
use crate::types::NodeKind;
#[derive(Debug, Clone)]
pub struct StepReport {
pub step: u64,
pub ran_nodes: Vec<NodeKind>,
pub skipped_nodes: Vec<NodeKind>,
pub barrier_outcome: BarrierOutcome,
pub next_frontier: Vec<NodeKind>,
pub state_versions: StateVersions,
pub completed: bool,
}
#[derive(Debug, Clone, Default)]
pub struct StepOptions {
pub interrupt_before: Vec<NodeKind>,
pub interrupt_after: Vec<NodeKind>,
pub interrupt_each_step: bool,
}
#[derive(Debug, Clone)]
pub enum PausedReason {
BeforeNode(NodeKind),
AfterNode(NodeKind),
AfterStep(u64),
}
#[derive(Debug, Clone)]
pub struct PausedReport {
pub session_state: SessionState,
pub reason: PausedReason,
}
#[derive(Debug, Clone)]
pub enum StepResult {
Completed(StepReport),
Paused(PausedReport),
}
pub(crate) struct SchedulerOutcome {
pub ran_nodes: Vec<NodeKind>,
pub skipped_nodes: Vec<NodeKind>,
pub partials: Vec<NodePartial>,
}