use crate::diagnostic::Diagnostic;
#[derive(Debug, thiserror::Error)]
pub enum FlexError {
#[error("path not found: {path}")]
PathNotFound {
path: String,
},
#[error("type mismatch at '{path}': expected {expected}, got {actual}")]
TypeMismatch {
path: String,
expected: String,
actual: String,
},
#[error("index {index} out of bounds (len {len}) at '{path}'")]
IndexOutOfBounds {
path: String,
index: usize,
len: usize,
},
#[error("deserialization failed at '{path}': {source}")]
DeserializeError {
path: String,
source: serde_json::Error,
},
#[error("invalid path syntax: {detail}")]
InvalidPath {
detail: String,
},
#[error("coercion failed at '{path}': {detail}")]
CoercionFailed {
path: String,
detail: String,
},
#[error("shaping produced {count} diagnostic(s)")]
ShapingDiagnostics {
count: usize,
diagnostics: Vec<Diagnostic>,
},
#[error("handler '{name}': {detail}")]
HandlerError {
name: String,
detail: String,
},
}
pub type Result<T> = std::result::Result<T, FlexError>;