Skip to main content

claude_agent/session/state/
enums.rs

1//! Session state enumerations.
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
6#[serde(rename_all = "snake_case")]
7pub enum SessionState {
8    #[default]
9    Created,
10    Active,
11    WaitingForTools,
12    Completed,
13    Failed,
14    Cancelled,
15}
16
17impl SessionState {
18    /// Parse from string with lenient matching (case-insensitive, accepts common aliases).
19    pub fn from_str_lenient(s: &str) -> Self {
20        match s.to_lowercase().as_str() {
21            "active" => Self::Active,
22            "waitingfortools" | "waiting_for_tools" => Self::WaitingForTools,
23            "completed" => Self::Completed,
24            "failed" => Self::Failed,
25            "cancelled" | "canceled" => Self::Cancelled,
26            _ => Self::Created,
27        }
28    }
29}
30
31#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
32#[serde(tag = "type", rename_all = "snake_case")]
33pub enum SessionType {
34    #[default]
35    Main,
36    Subagent {
37        agent_type: String,
38        description: String,
39    },
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn test_session_state_from_str_lenient() {
48        assert_eq!(
49            SessionState::from_str_lenient("active"),
50            SessionState::Active
51        );
52        assert_eq!(
53            SessionState::from_str_lenient("waitingfortools"),
54            SessionState::WaitingForTools
55        );
56        assert_eq!(
57            SessionState::from_str_lenient("waiting_for_tools"),
58            SessionState::WaitingForTools
59        );
60        assert_eq!(
61            SessionState::from_str_lenient("completed"),
62            SessionState::Completed
63        );
64        assert_eq!(
65            SessionState::from_str_lenient("failed"),
66            SessionState::Failed
67        );
68        assert_eq!(
69            SessionState::from_str_lenient("cancelled"),
70            SessionState::Cancelled
71        );
72        assert_eq!(
73            SessionState::from_str_lenient("canceled"),
74            SessionState::Cancelled
75        );
76        assert_eq!(
77            SessionState::from_str_lenient("unknown"),
78            SessionState::Created
79        );
80    }
81}