Skip to main content

bubbles/
error.rs

1//! Shared error and result types for the crate.
2
3use thiserror::Error;
4
5/// Alias for `Result<T, DialogueError>`.
6pub type Result<T> = core::result::Result<T, DialogueError>;
7
8/// All errors that can be produced by compilation or runtime execution.
9#[non_exhaustive]
10#[derive(Debug, Error, Clone)]
11pub enum DialogueError {
12    /// A parse-time error, optionally localised to a source span.
13    #[error("parse error at {file}:{line}: {message}")]
14    Parse {
15        /// Source file name or `"<source>"`.
16        file: String,
17        /// 1-based line number.
18        line: usize,
19        /// Human-readable description.
20        message: String,
21    },
22    /// A reference to an unknown node.
23    #[error("unknown node '{0}'")]
24    UnknownNode(String),
25    /// A duplicate node title was found across merged sources.
26    #[error("duplicate node title '{0}'")]
27    DuplicateNode(String),
28    /// A validation failure detected after all sources are merged.
29    #[error("validation error: {0}")]
30    Validation(String),
31    /// A runtime execution error.
32    #[error("runtime error: {0}")]
33    Runtime(String),
34    /// A type mismatch in an expression.
35    #[error("type error: {0}")]
36    Type(String),
37    /// An unknown variable was referenced.
38    #[error("undefined variable '{0}'")]
39    UndefinedVariable(String),
40    /// A function call failed.
41    #[error("function '{name}' error: {message}")]
42    Function {
43        /// Function name.
44        name: String,
45        /// Description.
46        message: String,
47    },
48}