pub trait WorkflowState:
Clone
+ Send
+ Sync
+ Serialize
+ DeserializeOwned {
type Effect: Effect;
// Required method
fn apply(&mut self, effect: Self::Effect);
// Provided methods
fn apply_batch(&mut self, effects: impl IntoIterator<Item = Self::Effect>) { ... }
fn apply_branch_change(&mut self, _change: &ChangeRecord) { ... }
fn initial() -> Self
where Self: Default { ... }
}Expand description
工作流状态 — 编译期类型安全的状态容器。
替代 HashMap<String, Value> 动态模型。
每个工作流定义自己的 State struct 和 Effect enum,
实现此 trait 以声明状态转换规则。
Merge 职责已从 WorkflowState 剥离到 MergeStrategy。
并行合并是 Graph 层的执行语义,不是 State 层的内建属性。
§示例
ⓘ
pub enum AgentEffect {
AppendMessage(Message),
IncrementIteration,
RecordOutputTokens(usize),
}
pub struct AgentState {
pub messages: Vec<Message>,
pub iterations: usize,
pub output_tokens: usize,
}
impl WorkflowState for AgentState {
type Effect = AgentEffect;
fn apply(&mut self, effect: Self::Effect) {
match effect {
AgentEffect::AppendMessage(msg) => self.messages.push(msg),
AgentEffect::IncrementIteration => self.iterations += 1,
AgentEffect::RecordOutputTokens(n) => self.output_tokens += n,
}
}
}Required Associated Types§
Required Methods§
Provided Methods§
Sourcefn apply_batch(&mut self, effects: impl IntoIterator<Item = Self::Effect>)
fn apply_batch(&mut self, effects: impl IntoIterator<Item = Self::Effect>)
批量应用 Effect(默认逐个 apply)。
Sourcefn apply_branch_change(&mut self, _change: &ChangeRecord)
fn apply_branch_change(&mut self, _change: &ChangeRecord)
应用一个 BranchState 变更记录到状态(backward compat)。
默认实现:no-op(纯 Effect 驱动的状态不需要此方法)。
State(HashMap wrapper)覆盖此方法,将 ChangeRecord 转换为 StateEffect。
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".