Skip to main content

synaptic_graph/
state.rs

1use serde::{Deserialize, Serialize};
2use synaptic_core::Message;
3
4/// Trait for graph state. Types implementing this can be used as graph state.
5pub trait State: Clone + Send + Sync + 'static {
6    /// Merge another state into this one (reducer pattern).
7    fn merge(&mut self, other: Self);
8}
9
10/// Built-in state containing a list of messages (most common use case).
11#[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}