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 SessionState {
8 #[default]
9 Created,
10 Active,
11 WaitingForTools,
12 Completed,
13 Failed,
14 Cancelled,
15}
16
17impl SessionState {
18 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}