1use serde::{Deserialize, Serialize};
2use synaptic_core::Message;
3
4pub trait State: Clone + Send + Sync + 'static {
6 fn merge(&mut self, other: Self);
8}
9
10#[derive(Debug, Clone, Default, Serialize, Deserialize)]
12pub struct MessageState {
13 pub messages: Vec<Message>,
14}
15
16impl MessageState {
17 pub fn new() -> Self {
18 Self { messages: vec![] }
19 }
20
21 pub fn with_messages(messages: Vec<Message>) -> Self {
22 Self { messages }
23 }
24
25 pub fn last_message(&self) -> Option<&Message> {
26 self.messages.last()
27 }
28}
29
30impl State for MessageState {
31 fn merge(&mut self, other: Self) {
32 self.messages.extend(other.messages);
33 }
34}