Skip to main content

zeph_subagent/
state.rs

1// SPDX-FileCopyrightText: 2026 Andrei G <bug-ops>
2// SPDX-License-Identifier: MIT OR Apache-2.0
3
4/// Lifecycle state of a sub-agent task.
5#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
6pub enum SubAgentState {
7    Submitted,
8    Working,
9    Completed,
10    Failed,
11    Canceled,
12}
13
14#[cfg(test)]
15mod tests {
16    use super::*;
17
18    #[test]
19    fn test_all_variants_debug() {
20        assert_eq!(format!("{:?}", SubAgentState::Submitted), "Submitted");
21        assert_eq!(format!("{:?}", SubAgentState::Working), "Working");
22        assert_eq!(format!("{:?}", SubAgentState::Completed), "Completed");
23        assert_eq!(format!("{:?}", SubAgentState::Failed), "Failed");
24        assert_eq!(format!("{:?}", SubAgentState::Canceled), "Canceled");
25    }
26
27    #[test]
28    fn test_clone_and_copy() {
29        let state = SubAgentState::Working;
30        let cloned = state;
31        assert_eq!(state, cloned);
32        let copied: SubAgentState = state;
33        assert_eq!(copied, SubAgentState::Working);
34    }
35
36    #[test]
37    fn test_partial_eq() {
38        assert_eq!(SubAgentState::Completed, SubAgentState::Completed);
39        assert_ne!(SubAgentState::Submitted, SubAgentState::Failed);
40    }
41
42    #[test]
43    fn test_terminal_states_are_distinct_from_active() {
44        let active = [SubAgentState::Submitted, SubAgentState::Working];
45        let terminal = [
46            SubAgentState::Completed,
47            SubAgentState::Failed,
48            SubAgentState::Canceled,
49        ];
50        for a in active {
51            for t in terminal {
52                assert_ne!(a, t);
53            }
54        }
55    }
56}