use serde::ser::SerializeMap;
use serde::{Serialize, Serializer};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum DecisionGraphValidationError {
#[error("Invalid input node count: {0}")]
InvalidInputCount(u32),
#[error("Invalid output node count: {0}")]
InvalidOutputCount(u32),
#[error("Cyclic graph detected")]
CyclicGraph,
#[error("Missing node")]
MissingNode(String),
}
impl Serialize for DecisionGraphValidationError {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut map = serializer.serialize_map(None)?;
match &self {
DecisionGraphValidationError::InvalidInputCount(count) => {
map.serialize_entry("type", "invalidInputCount")?;
map.serialize_entry("nodeCount", count)?;
}
DecisionGraphValidationError::InvalidOutputCount(count) => {
map.serialize_entry("type", "invalidOutputCount")?;
map.serialize_entry("nodeCount", count)?;
}
DecisionGraphValidationError::MissingNode(node_id) => {
map.serialize_entry("type", "missingNode")?;
map.serialize_entry("nodeId", node_id)?;
}
DecisionGraphValidationError::CyclicGraph => {
map.serialize_entry("type", "cyclicGraph")?;
}
}
map.end()
}
}