1use crate::model::types::NodeId;
2
3#[derive(Debug, thiserror::Error)]
5pub enum PoolError {
6 #[error("重复的节点 ID: {0}")]
8 DuplicateNodeId(NodeId),
9
10 #[error("父节点不存在: {0}")]
12 ParentNotFound(NodeId),
13
14 #[error("子节点不存在: {0}")]
16 ChildNotFound(NodeId),
17
18 #[error("节点不存在: {0}")]
20 NodeNotFound(NodeId),
21
22 #[error("检测到孤立节点: {0}")]
24 OrphanNode(NodeId),
25
26 #[error("无效的父子关系: 子节点 {child} 不是父节点 {alleged_parent} 的子节点")]
28 InvalidParenting { child: NodeId, alleged_parent: NodeId },
29
30 #[error("节点ID不匹配: 新节点ID({nodeid})与要替换的节点ID({new_node_id})不一致")]
32 InvalidNodeId { nodeid: NodeId, new_node_id: NodeId },
33
34 #[error("节点池为空")]
36 EmptyPool,
37
38 #[error("检测到循环引用: 节点 {0} 不能成为自己的祖先")]
40 CyclicReference(NodeId),
41
42 #[error("无效的节点移动: 无法将节点 {0} 移动到目标位置")]
44 InvalidNodeMove(NodeId),
45
46 #[error("节点 {0} 已被锁定,无法执行操作")]
48 NodeLocked(NodeId),
49
50 #[error("节点 {0} 已被删除")]
52 NodeDeleted(NodeId),
53}
54
55impl PoolError {
56 pub fn node_id(&self) -> Option<&NodeId> {
58 match self {
59 PoolError::DuplicateNodeId(id) => Some(id),
60 PoolError::ParentNotFound(id) => Some(id),
61 PoolError::ChildNotFound(id) => Some(id),
62 PoolError::NodeNotFound(id) => Some(id),
63 PoolError::OrphanNode(id) => Some(id),
64 PoolError::InvalidParenting { child, .. } => Some(child),
65 PoolError::InvalidNodeId { nodeid, .. } => Some(nodeid),
66 PoolError::CyclicReference(id) => Some(id),
67 PoolError::InvalidNodeMove(id) => Some(id),
68 PoolError::NodeLocked(id) => Some(id),
69 PoolError::NodeDeleted(id) => Some(id),
70 PoolError::EmptyPool => None,
71 }
72 }
73}
74
75pub type PoolResult<T> = Result<T, PoolError>;
77
78pub type StateResult<T> = Result<T, StateError>;
80
81#[derive(Debug, thiserror::Error)]
83pub enum StateError {
84 #[error("插件状态初始化失败: {0}")]
86 PluginInitError(String),
87
88 #[error("插件状态应用失败: {0}")]
90 PluginApplyError(String),
91
92 #[error("事务应用失败: {0}")]
94 TransactionError(String),
95
96 #[error("配置错误: {0}")]
98 ConfigurationError(String),
99
100 #[error("字段操作失败: {0}")]
102 FieldError(String),
103
104 #[error("Schema错误: {0}")]
106 SchemaError(String),
107
108 #[error("插件未找到: {0}")]
110 PluginNotFound(String),
111
112 #[error("插件状态无效: {0}")]
114 InvalidPluginState(String),
115}