Skip to main content

rgpre/
error.rs

1use std::path::PathBuf;
2use thiserror::Error;
3
4#[derive(Error, Debug)]
5pub enum Error {
6    #[error("I/O error: {0}")]
7    Io(#[from] std::io::Error),
8
9    #[error("Parse error: {0}")]
10    Parse(String),
11
12    #[error("JSON serialization error: {0}")]
13    Serialize(#[from] serde_json::Error),
14
15    #[error("GLTF error: {0}")]
16    Gltf(#[from] gltf::Error),
17
18    #[error("Conversion error: {0}")]
19    Conversion(String),
20
21    #[error("File operation error on '{}': {message}", path.display())]
22    File { path: PathBuf, message: String },
23}
24
25impl From<nom::Err<nom::error::Error<&[u8]>>> for Error {
26    fn from(err: nom::Err<nom::error::Error<&[u8]>>) -> Self {
27        match &err {
28            nom::Err::Error(e) | nom::Err::Failure(e) => {
29                Self::Parse(format!("nom {:?}: {}", e.code, err))
30            }
31            nom::Err::Incomplete(needed) => Self::Parse(format!("incomplete input: {needed:?}")),
32        }
33    }
34}