use super::ResourceId;
#[derive(Debug, thiserror::Error)]
pub enum RenderGraphError {
#[error("Slot '{slot}' not found in pass '{pass}' resource mappings")]
SlotNotFound { slot: String, pass: String },
#[error("Resource '{resource}' (id: {id:?}) not bound")]
ResourceNotBound { resource: String, id: ResourceId },
#[error("Resource '{resource}' descriptor not found (id: {id:?})")]
DescriptorNotFound { resource: String, id: ResourceId },
#[error("Type mismatch: {operation} called on {actual_type} resource '{resource}'")]
TypeMismatch {
operation: String,
actual_type: String,
resource: String,
},
#[error("Pass '{pass}': slot '{slot}' not provided in mappings")]
SlotNotMapped { pass: String, slot: String },
#[error("Cannot resize external resource '{resource}'")]
CannotResizeExternal { resource: String },
#[error("Cannot resize buffer '{resource}' with width/height")]
CannotResizeBuffer { resource: String },
#[error("Cannot resize non-transient resource '{resource}'")]
CannotResizeNonTransient { resource: String },
#[error("Render graph contains cycles")]
CyclicDependency,
#[error("Sub-graph '{sub_graph}' not found")]
SubGraphNotFound { sub_graph: String },
#[error("Sub-graph input '{input}' expects {expected} but received {received}")]
SubGraphInputTypeMismatch {
input: String,
expected: String,
received: String,
},
#[error("Resource '{resource}' (id: {id:?}) not found")]
ResourceNotFound { resource: String, id: ResourceId },
#[error("Pass '{pass}' not found")]
PassNotFound { pass: String },
}
pub type Result<T> = std::result::Result<T, RenderGraphError>;