use thiserror::Error;
use crate::node::NodeId;
use crate::resource::ResourceId;
#[derive(Debug, Error, Clone, PartialEq, Eq)]
pub enum EngawaError {
#[error("validation failed: {0}")]
Validation(#[from] ValidationError),
}
#[derive(Debug, Error, Clone, PartialEq, Eq)]
pub enum ValidationError {
#[error("duplicate node id: {0:?}")]
DuplicateNode(NodeId),
#[error("duplicate resource id: {0:?}")]
DuplicateResource(ResourceId),
#[error(
"node {node:?} references resource {resource:?} that no other node produces \
and that isn't declared as a graph input"
)]
UnboundInput {
node: NodeId,
resource: ResourceId,
},
#[error(
"cycle detected in render graph; involved nodes: {0:?}"
)]
Cycle(Vec<NodeId>),
#[error(
"graph output {0:?} is not produced by any node"
)]
UnboundOutput(ResourceId),
#[error(
"resource {0:?} is produced by multiple nodes; each resource must have a single writer"
)]
MultipleWriters(ResourceId),
}