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}