flare_core_runtime/task/
state.rs1use std::fmt;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7pub enum TaskState {
8 Pending,
10 Starting,
12 Running,
14 Stopping,
16 Stopped,
18 Failed,
20}
21
22impl TaskState {
23 pub fn is_terminal(&self) -> bool {
25 matches!(self, TaskState::Stopped | TaskState::Failed)
26 }
27
28 pub fn can_transition_to(&self, target: TaskState) -> bool {
30 use TaskState::*;
31 match (self, target) {
32 (Pending, Starting) => true,
34 (Starting, Running) | (Starting, Failed) => true,
36 (Running, Stopping) | (Running, Failed) => true,
38 (Stopping, Stopped) | (Stopping, Failed) => true,
40 (Stopped, _) | (Failed, _) => false,
42 _ => false,
44 }
45 }
46}
47
48impl fmt::Display for TaskState {
49 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
50 match self {
51 TaskState::Pending => write!(f, "Pending"),
52 TaskState::Starting => write!(f, "Starting"),
53 TaskState::Running => write!(f, "Running"),
54 TaskState::Stopping => write!(f, "Stopping"),
55 TaskState::Stopped => write!(f, "Stopped"),
56 TaskState::Failed => write!(f, "Failed"),
57 }
58 }
59}