#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MessageRole {
User,
Assistant,
}
#[derive(Debug, Clone)]
pub struct Message {
pub role: MessageRole,
pub content: String,
pub attachments: Vec<String>,
pub timestamp: std::time::SystemTime,
}
impl Message {
pub fn user(content: String) -> Self {
Self {
role: MessageRole::User,
content,
attachments: Vec::new(),
timestamp: std::time::SystemTime::now(),
}
}
pub fn assistant(content: String) -> Self {
Self {
role: MessageRole::Assistant,
content,
attachments: Vec::new(),
timestamp: std::time::SystemTime::now(),
}
}
pub fn with_attachment(mut self, file: String) -> Self {
self.attachments.push(file);
self
}
}
#[derive(Debug, Default, Clone)]
pub struct MessageStore {
messages: Vec<Message>,
}
impl MessageStore {
pub fn new() -> Self {
Self::default()
}
pub fn add(&mut self, message: Message) {
self.messages.push(message);
}
pub fn messages(&self) -> &[Message] {
&self.messages
}
pub fn clear(&mut self) {
self.messages.clear();
}
pub fn len(&self) -> usize {
self.messages.len()
}
pub fn is_empty(&self) -> bool {
self.messages.is_empty()
}
pub fn last(&self) -> Option<&Message> {
self.messages.last()
}
}