zen_engine/decision_graph/
error.rs

1use serde::ser::SerializeMap;
2use serde::{Serialize, Serializer};
3use thiserror::Error;
4
5#[derive(Debug, Error)]
6pub enum DecisionGraphValidationError {
7    #[error("Invalid input node count: {0}")]
8    InvalidInputCount(u32),
9
10    #[error("Invalid output node count: {0}")]
11    InvalidOutputCount(u32),
12
13    #[error("Cyclic graph detected")]
14    CyclicGraph,
15
16    #[error("Missing node")]
17    MissingNode(String),
18}
19
20impl Serialize for DecisionGraphValidationError {
21    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
22    where
23        S: Serializer,
24    {
25        let mut map = serializer.serialize_map(None)?;
26
27        match &self {
28            DecisionGraphValidationError::InvalidInputCount(count) => {
29                map.serialize_entry("type", "invalidInputCount")?;
30                map.serialize_entry("nodeCount", count)?;
31            }
32            DecisionGraphValidationError::InvalidOutputCount(count) => {
33                map.serialize_entry("type", "invalidOutputCount")?;
34                map.serialize_entry("nodeCount", count)?;
35            }
36            DecisionGraphValidationError::MissingNode(node_id) => {
37                map.serialize_entry("type", "missingNode")?;
38                map.serialize_entry("nodeId", node_id)?;
39            }
40            DecisionGraphValidationError::CyclicGraph => {
41                map.serialize_entry("type", "cyclicGraph")?;
42            }
43        }
44
45        map.end()
46    }
47}