Skip to main content

librashader_presets/
error.rs

1use std::path::PathBuf;
2use thiserror::Error;
3
4/// Error type for preset parsing.
5#[derive(Error, Debug)]
6pub enum ParsePresetError {
7    /// An error occurred when tokenizing the preset file.
8    #[error("shader preset lexing error")]
9    LexerError { offset: usize, row: u32, col: usize },
10    /// An error occurred when parsing the preset file.
11    #[error("shader preset parse error")]
12    ParserError {
13        offset: usize,
14        row: u32,
15        col: usize,
16        kind: ParseErrorKind,
17    },
18    /// The scale type was invalid.
19    #[error("invalid scale type")]
20    InvalidScaleType(String),
21    /// The preset reference depth exceeded 16.
22    #[error("exceeded maximum reference depth (16)")]
23    ExceededReferenceDepth,
24    /// An absolute path could not be found to resolve the shader preset against.
25    #[error("shader presets must be resolved against an absolute path")]
26    RootPathWasNotAbsolute,
27    /// An IO error occurred when reading the shader preset.
28    #[error("io error on file {0:?}: {1}")]
29    IOError(PathBuf, std::io::Error),
30    /// The shader preset did not contain valid UTF-8 bytes.
31    #[error("expected utf8 bytes but got invalid utf8")]
32    Utf8Error(Vec<u8>),
33}
34
35/// The kind of error that may occur in parsing.
36#[derive(Debug)]
37pub enum ParseErrorKind {
38    /// Expected an indexed key (i.e. `shader0`, `shader1`, ...)
39    Index(&'static str),
40    /// Expected a signed integer.
41    Int,
42    /// Expected an unsigned integer.
43    UnsignedInt,
44    /// Expected a float.
45    Float,
46    /// Expected a boolean.
47    Bool,
48}