ai_agent/utils/
session_state.rs1use serde::{Deserialize, Serialize};
4
5#[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#[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}