Skip to main content

wesichain_graph/
error.rs

1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum GraphError {
5    #[error("checkpoint failed: {0}")]
6    Checkpoint(String),
7    #[error("node failed: {node}: {source}")]
8    NodeFailed {
9        node: String,
10        #[source]
11        source: Box<dyn std::error::Error + Send + Sync>,
12    },
13    #[error("missing node: {node}")]
14    MissingNode { node: String },
15    #[error("invalid edge to '{node}'")]
16    InvalidEdge { node: String },
17    #[error("Max steps exceeded: reached {reached}, limit {max}")]
18    MaxStepsExceeded { max: usize, reached: usize },
19    #[error("Cycle detected: node '{node}' repeated in recent window")]
20    CycleDetected { node: String, recent: Vec<String> },
21    #[error("interrupted")]
22    Interrupted,
23    #[error("tool call failed for '{0}': {1}")]
24    ToolCallFailed(String, String),
25    #[error("invalid tool call response: {0}")]
26    InvalidToolCallResponse(String),
27    #[error("duplicate tool name: {0}")]
28    DuplicateToolName(String),
29    #[error("Global execution timed out after {elapsed:?}")]
30    Timeout {
31        node: String,
32        elapsed: std::time::Duration,
33    },
34    #[error("Max visits exceeded for node '{node}': limit {max}")]
35    MaxVisitsExceeded { node: String, max: u32 },
36    #[error("Max loop iterations exceeded: node '{node}' visited {max} times on path {path_id}")]
37    MaxLoopIterationsExceeded {
38        node: String,
39        max: u32,
40        path_id: u64,
41    },
42    #[error("system error: {0}")]
43    System(String),
44    #[error(transparent)]
45    Wesichain(#[from] wesichain_core::WesichainError),
46}