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}