Skip to main content

microde_application/
types.rs

1/// Describes whether a module completes independently or requires a stop.
2#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3pub enum ModuleKind {
4    Passive,
5    Active,
6}
7
8/// The observable lifecycle state of a application.
9#[derive(Debug, Clone, Copy, PartialEq, Eq)]
10pub enum MicrodeApplicationState {
11    Idle,
12    Installing,
13    Initialization,
14    Setup,
15    Running,
16    TearDown,
17    Shutdown,
18    CleanUp,
19    Finished,
20    Failed,
21}
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26
27    #[test]
28    fn module_kinds_are_distinct_copyable_values() {
29        let passive = ModuleKind::Passive;
30        let copied = passive;
31
32        assert_eq!(passive, copied);
33        assert_ne!(passive, ModuleKind::Active);
34        assert_eq!(format!("{passive:?}"), "Passive");
35    }
36
37    #[test]
38    fn lifecycle_states_preserve_the_runtime_vocabulary() {
39        let states = [
40            MicrodeApplicationState::Idle,
41            MicrodeApplicationState::Installing,
42            MicrodeApplicationState::Initialization,
43            MicrodeApplicationState::Setup,
44            MicrodeApplicationState::Running,
45            MicrodeApplicationState::TearDown,
46            MicrodeApplicationState::Shutdown,
47            MicrodeApplicationState::CleanUp,
48            MicrodeApplicationState::Finished,
49            MicrodeApplicationState::Failed,
50        ];
51
52        assert_eq!(states.len(), 10);
53        assert_eq!(states[0], MicrodeApplicationState::Idle);
54        assert_eq!(states[9], MicrodeApplicationState::Failed);
55    }
56}