claude_agent/session/state/
enums.rs1use 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 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}