1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5#[serde(rename_all = "snake_case")]
6pub enum TaskState {
7 Pending,
8 Received,
9 Started,
10 Success,
11 Failure,
12 Retry,
13 Revoked,
14 DeadLettered,
15}
16
17impl TaskState {
18 pub fn is_terminal(&self) -> bool {
20 matches!(
21 self,
22 TaskState::Success | TaskState::Failure | TaskState::Revoked | TaskState::DeadLettered
23 )
24 }
25
26 pub fn is_active(&self) -> bool {
28 matches!(
29 self,
30 TaskState::Pending | TaskState::Received | TaskState::Started | TaskState::Retry
31 )
32 }
33}
34
35impl std::fmt::Display for TaskState {
36 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37 let s = match self {
38 TaskState::Pending => "pending",
39 TaskState::Received => "received",
40 TaskState::Started => "started",
41 TaskState::Success => "success",
42 TaskState::Failure => "failure",
43 TaskState::Retry => "retry",
44 TaskState::Revoked => "revoked",
45 TaskState::DeadLettered => "dead_lettered",
46 };
47 f.write_str(s)
48 }
49}