use thiserror::Error;
pub type Result<T> = core::result::Result<T, DialogueError>;
#[non_exhaustive]
#[derive(Debug, Error, Clone)]
pub enum DialogueError {
#[error("parse error at {file}:{line}: {message}")]
Parse {
file: String,
line: usize,
message: String,
},
#[error("unknown node '{0}'")]
UnknownNode(String),
#[error("duplicate node title '{0}'")]
DuplicateNode(String),
#[error("validation error: {0}")]
Validation(String),
#[error("protocol violation: {0}")]
ProtocolViolation(String),
#[error("type mismatch in {context}: expected {expected}, got {got}")]
TypeMismatch {
expected: String,
got: String,
context: String,
},
#[error("undefined variable '{0}'")]
UndefinedVariable(String),
#[error("function '{name}' error: {message}")]
Function {
name: String,
message: String,
},
}