Skip to main content

ai_agent/utils/
session_state.rs

1//! Session state management.
2
3use serde::{Deserialize, Serialize};
4
5/// Session state
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct SessionState {
8    pub id: String,
9    pub created_at: String,
10    pub updated_at: String,
11    pub status: SessionStatus,
12    pub messages_count: u32,
13    pub model: Option<String>,
14}
15
16/// Session status
17#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
18pub enum SessionStatus {
19    Active,
20    Paused,
21    Completed,
22    Error,
23}
24
25impl Default for SessionStatus {
26    fn default() -> Self {
27        SessionStatus::Active
28    }
29}
30
31impl SessionState {
32    pub fn new(id: String) -> Self {
33        let now = chrono::Utc::now().to_rfc3339();
34
35        Self {
36            id,
37            created_at: now.clone(),
38            updated_at: now,
39            status: SessionStatus::Active,
40            messages_count: 0,
41            model: None,
42        }
43    }
44
45    pub fn update(&mut self) {
46        self.updated_at = chrono::Utc::now().to_rfc3339();
47    }
48
49    pub fn increment_messages(&mut self) {
50        self.messages_count += 1;
51        self.update();
52    }
53
54    pub fn set_status(&mut self, status: SessionStatus) {
55        self.status = status;
56        self.update();
57    }
58
59    pub fn set_model(&mut self, model: String) {
60        self.model = Some(model);
61        self.update();
62    }
63}