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