artifactize_core/monitor/model/
status.rs1use crate::types::{ArtifactValidationStatus, RequestStatus, RunStatus};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
9pub enum Status {
10 Error,
11 Red,
12 Blocked,
13 Running,
14 WaitingHuman,
15 Queued,
16 BudgetExhausted,
17 WaitDependency,
18 Wait,
19 Stale,
20 Unreviewed,
21 Incomplete,
22 Deferred,
23 Provisional,
24 Yellow,
25 Green,
26 Basis,
27}
28
29impl Status {
30 pub fn as_str(self) -> &'static str {
32 match self {
33 Self::Error => "ERROR",
34 Self::Red => "RED",
35 Self::Blocked => "BLOCKED",
36 Self::Running => "RUNNING",
37 Self::WaitingHuman => "WAITING_HUMAN",
38 Self::Queued => "QUEUED",
39 Self::BudgetExhausted => "BUDGET_EXHAUSTED",
40 Self::WaitDependency => "WAIT_DEPENDENCY",
41 Self::Wait => "WAIT",
42 Self::Stale => "STALE",
43 Self::Unreviewed => "UNREVIEWED",
44 Self::Incomplete => "INCOMPLETE",
45 Self::Deferred => "DEFERRED",
46 Self::Provisional => "PROVISIONAL",
47 Self::Yellow => "YELLOW",
48 Self::Green => "GREEN",
49 Self::Basis => "BASIS",
50 }
51 }
52
53 pub fn glyph(self) -> &'static str {
55 match self {
56 Self::Green => "✓",
57 Self::Red => "✗",
58 Self::Error => "!",
59 Self::Running => "◐",
60 Self::WaitingHuman | Self::Deferred | Self::Yellow => "?",
61 Self::Provisional => "○",
62 Self::Queued => "·",
63 Self::Blocked => "⊘",
64 Self::WaitDependency | Self::Wait => "…",
65 Self::BudgetExhausted => "$",
66 Self::Basis => "◇",
67 Self::Stale | Self::Unreviewed | Self::Incomplete => "○",
68 }
69 }
70
71 pub fn meaning(self) -> &'static str {
73 match self {
74 Self::Green => "criteria met",
75 Self::Red => "criteria not met",
76 Self::Error => "operational failure, not a verdict",
77 Self::Running => "executing",
78 Self::WaitingHuman => "waiting for a Human submission",
79 Self::Deferred => "waiting for a Human sign-off; other evals go on",
80 Self::Provisional => "criteria met; dependent sign-offs remain",
81 Self::Yellow => "ended with only sign-offs left",
82 Self::Blocked => "blocked by a RED dependency",
83 Self::WaitDependency => "waiting for current GREEN dependency evidence",
84 Self::BudgetExhausted => "maxExecutions reached before it started",
85 _ => "not executed",
86 }
87 }
88}
89
90impl std::fmt::Display for Status {
91 fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
92 formatter.write_str(self.as_str())
93 }
94}
95
96impl From<RunStatus> for Status {
97 fn from(status: RunStatus) -> Self {
98 match status {
99 RunStatus::Running => Self::Running,
100 RunStatus::WaitingHuman => Self::WaitingHuman,
101 RunStatus::Green => Self::Green,
102 RunStatus::Red => Self::Red,
103 RunStatus::Error => Self::Error,
104 RunStatus::Incomplete => Self::Incomplete,
105 RunStatus::Yellow => Self::Yellow,
106 }
107 }
108}
109
110impl From<RequestStatus> for Status {
111 fn from(status: RequestStatus) -> Self {
112 match status {
113 RequestStatus::Queued => Self::Queued,
114 RequestStatus::Running => Self::Running,
115 RequestStatus::WaitingHuman => Self::WaitingHuman,
116 RequestStatus::Deferred => Self::Deferred,
117 RequestStatus::Provisional => Self::Provisional,
118 RequestStatus::Green => Self::Green,
119 RequestStatus::Red => Self::Red,
120 RequestStatus::Error => Self::Error,
121 RequestStatus::BudgetExhausted => Self::BudgetExhausted,
122 RequestStatus::Stale => Self::Stale,
123 RequestStatus::Unreviewed => Self::Unreviewed,
124 RequestStatus::WaitDependency => Self::WaitDependency,
125 RequestStatus::Blocked => Self::Blocked,
126 }
127 }
128}
129
130impl From<ArtifactValidationStatus> for Status {
131 fn from(status: ArtifactValidationStatus) -> Self {
132 match status {
133 ArtifactValidationStatus::Basis => Self::Basis,
134 ArtifactValidationStatus::Deferred => Self::Deferred,
135 ArtifactValidationStatus::Provisional => Self::Provisional,
136 ArtifactValidationStatus::Green => Self::Green,
137 ArtifactValidationStatus::Incomplete => Self::Incomplete,
138 ArtifactValidationStatus::Error => Self::Error,
139 ArtifactValidationStatus::Red => Self::Red,
140 ArtifactValidationStatus::Blocked => Self::Blocked,
141 ArtifactValidationStatus::Wait => Self::Wait,
142 ArtifactValidationStatus::Stale => Self::Stale,
143 ArtifactValidationStatus::Unreviewed => Self::Unreviewed,
144 }
145 }
146}