ferment_sys/
error.rs

1use std::env::VarError;
2use std::fmt::Debug;
3use std::io;
4use std::process::ExitStatus;
5
6#[derive(Debug)]
7pub enum Error {
8    FileError(io::Error),
9    ExpansionError(&'static str),
10    MorphingError(&'static str),
11    ParseSyntaxTree(syn::Error),
12    Configuration(String),
13    Exit(ExitStatus),
14    VarError(VarError),
15    Cbindgen(cbindgen::Error),
16}
17
18impl std::fmt::Display for Error {
19    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
20        match self {
21            Error::FileError(ref err) => std::fmt::Display::fmt(&err, f),
22            Error::ExpansionError(msg) => write!(f, "{}", msg),
23            Error::ParseSyntaxTree(ref err) => std::fmt::Display::fmt(&err, f),
24            Error::MorphingError(ref err) => std::fmt::Display::fmt(&err, f),
25            Error::Configuration(err) => std::fmt::Display::fmt(err, f),
26            Error::Exit(exit) => std::fmt::Display::fmt(exit, f),
27            Error::VarError(err) => std::fmt::Display::fmt(err, f),
28            Error::Cbindgen(err) => std::fmt::Display::fmt(err, f),
29        }
30    }
31}
32impl std::error::Error for Error {}
33
34impl From<io::Error> for Error {
35    fn from(value: io::Error) -> Self {
36        Error::FileError(value)
37    }
38}
39impl From<syn::Error> for Error {
40    fn from(value: syn::Error) -> Self {
41        Error::ParseSyntaxTree(value)
42    }
43}
44// impl From<ExitStatus> for Error {
45//     fn from(value: ExitStatus) -> Self {
46//         Error::Exit(value)
47//     }
48// }
49
50// impl From<VarError> for Error {
51//     fn from(value: VarError) -> Self {
52//         Error::Configuration(format!("Environment variable error: {value}").as_str())
53//     }
54// }
55//
56// impl From<cbindgen::Error> for Error {
57//     fn from(value: cbindgen::Error) -> Self {
58//         Error::Configuration(format!("cbindgen error: {value}").as_str())
59//     }
60// }