ratatui_toolkit/widgets/ai_chat/state/
message.rs1use ratatui::style::{Color, Modifier, Style};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum MessageRole {
6 User,
8 Assistant,
10}
11
12#[derive(Debug, Clone)]
14pub struct Message {
15 pub role: MessageRole,
17 pub content: String,
19 pub attachments: Vec<String>,
21 pub timestamp: std::time::SystemTime,
23}
24
25impl Message {
26 pub fn user(content: String) -> Self {
28 Self {
29 role: MessageRole::User,
30 content,
31 attachments: Vec::new(),
32 timestamp: std::time::SystemTime::now(),
33 }
34 }
35
36 pub fn assistant(content: String) -> Self {
38 Self {
39 role: MessageRole::Assistant,
40 content,
41 attachments: Vec::new(),
42 timestamp: std::time::SystemTime::now(),
43 }
44 }
45
46 pub fn with_attachment(mut self, file: String) -> Self {
48 self.attachments.push(file);
49 self
50 }
51}
52
53#[derive(Debug, Default, Clone)]
55pub struct MessageStore {
56 messages: Vec<Message>,
58}
59
60impl MessageStore {
61 pub fn new() -> Self {
63 Self::default()
64 }
65
66 pub fn add(&mut self, message: Message) {
68 self.messages.push(message);
69 }
70
71 pub fn messages(&self) -> &[Message] {
73 &self.messages
74 }
75
76 pub fn clear(&mut self) {
78 self.messages.clear();
79 }
80
81 pub fn len(&self) -> usize {
83 self.messages.len()
84 }
85
86 pub fn is_empty(&self) -> bool {
88 self.messages.is_empty()
89 }
90
91 pub fn last(&self) -> Option<&Message> {
93 self.messages.last()
94 }
95}