Skip to main content

wfe_core/models/
status.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
4pub enum WorkflowStatus {
5    #[default]
6    Runnable,
7    Suspended,
8    Complete,
9    Terminated,
10}
11
12#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
13pub enum PointerStatus {
14    #[default]
15    Pending,
16    Running,
17    Complete,
18    Sleeping,
19    WaitingForEvent,
20    Failed,
21    Compensated,
22    Cancelled,
23    PendingPredecessor,
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29    use pretty_assertions::assert_eq;
30
31    #[test]
32    fn workflow_status_default_is_runnable() {
33        assert_eq!(WorkflowStatus::default(), WorkflowStatus::Runnable);
34    }
35
36    #[test]
37    fn pointer_status_default_is_pending() {
38        assert_eq!(PointerStatus::default(), PointerStatus::Pending);
39    }
40
41    #[test]
42    fn workflow_status_serde_round_trip() {
43        for status in [
44            WorkflowStatus::Runnable,
45            WorkflowStatus::Suspended,
46            WorkflowStatus::Complete,
47            WorkflowStatus::Terminated,
48        ] {
49            let json = serde_json::to_string(&status).unwrap();
50            let deserialized: WorkflowStatus = serde_json::from_str(&json).unwrap();
51            assert_eq!(status, deserialized);
52        }
53    }
54
55    #[test]
56    fn pointer_status_serde_round_trip() {
57        for status in [
58            PointerStatus::Pending,
59            PointerStatus::Running,
60            PointerStatus::Complete,
61            PointerStatus::Sleeping,
62            PointerStatus::WaitingForEvent,
63            PointerStatus::Failed,
64            PointerStatus::Compensated,
65            PointerStatus::Cancelled,
66            PointerStatus::PendingPredecessor,
67        ] {
68            let json = serde_json::to_string(&status).unwrap();
69            let deserialized: PointerStatus = serde_json::from_str(&json).unwrap();
70            assert_eq!(status, deserialized);
71        }
72    }
73}