106 lines
2.9 KiB
Rust
106 lines
2.9 KiB
Rust
//! 工作流事件定义
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::types::NodeId;
|
|
|
|
/// 人工审批选择类型(F-260615-01)
|
|
/// - Single: 单选(decision 单值),缺省值,向后兼容现有调用方
|
|
/// - Multiple: 多选(decisions 数组)
|
|
///
|
|
/// serde rename_all="snake_case" → "single"/"multiple"
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum SelectType {
|
|
#[default]
|
|
Single,
|
|
Multiple,
|
|
}
|
|
|
|
/// 人工审批响应
|
|
///
|
|
/// 兼容字段(decision 单值):仅 select_type=Single 时使用;
|
|
/// 新字段 decisions 数组:Single 时长度=1,Multiple 时长度≥1。
|
|
/// 旧调用方仍可只填 decision,HumanNode 下游兼容两者。
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct HumanApprovalResponse {
|
|
pub execution_id: String,
|
|
pub node_id: NodeId,
|
|
pub decision: String,
|
|
#[serde(default)]
|
|
pub decisions: Vec<String>,
|
|
pub comment: Option<String>,
|
|
}
|
|
|
|
/// 工作流事件
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
#[serde(tag = "type", rename_all = "snake_case")]
|
|
pub enum WorkflowEvent {
|
|
/// 节点开始执行
|
|
NodeStarted {
|
|
node_id: NodeId,
|
|
},
|
|
/// 节点执行进度更新
|
|
NodeProgress {
|
|
node_id: NodeId,
|
|
progress: f32,
|
|
message: String,
|
|
},
|
|
/// 节点产生输出
|
|
NodeOutput {
|
|
node_id: NodeId,
|
|
output: String,
|
|
},
|
|
/// 节点执行完成
|
|
NodeCompleted {
|
|
node_id: NodeId,
|
|
duration_ms: u64,
|
|
},
|
|
/// 节点执行失败
|
|
NodeFailed {
|
|
node_id: NodeId,
|
|
error: String,
|
|
},
|
|
/// 节点执行被取消(如 HumanNode 人工审批取消:set_cancelled 后节点返回 Err,
|
|
/// 状态保 Cancelled 终态)。语义有别于 NodeFailed(失败):取消是用户主动行为,
|
|
/// 前端按取消归「取消」展示,不应归类「失败」。
|
|
NodeCancelled {
|
|
node_id: NodeId,
|
|
},
|
|
/// 工作流暂停(等待外部输入)
|
|
WorkflowPaused {
|
|
reason: String,
|
|
waiting_node: NodeId,
|
|
},
|
|
/// 工作流执行完成
|
|
WorkflowCompleted {
|
|
total_duration_ms: u64,
|
|
},
|
|
/// 工作流执行失败
|
|
WorkflowFailed {
|
|
error: String,
|
|
failed_node: NodeId,
|
|
},
|
|
/// 人工审批请求
|
|
HumanApprovalRequest {
|
|
execution_id: String,
|
|
node_id: NodeId,
|
|
title: String,
|
|
description: String,
|
|
options: Vec<String>,
|
|
/// F-260615-01: 选择类型,缺省 Single(向后兼容)
|
|
#[serde(default)]
|
|
select_type: SelectType,
|
|
},
|
|
/// 人工审批响应
|
|
HumanApprovalResponse {
|
|
execution_id: String,
|
|
node_id: NodeId,
|
|
decision: String,
|
|
/// F-260615-01: 多选结果(Single 模式长度=1,Multiple 模式长度≥1)
|
|
#[serde(default)]
|
|
decisions: Vec<String>,
|
|
comment: Option<String>,
|
|
},
|
|
}
|