vaal/
error.rs

1use std::{ffi::CStr, fmt, io};
2use vaal_sys as ffi;
3
4#[derive(Debug, Clone)]
5pub enum Error {
6    VAALError(&'static str),
7    WrapperError(String),
8    Null(),
9    IoError(io::ErrorKind),
10}
11
12impl From<ffi::VAALError> for Error {
13    fn from(value: ffi::VAALError) -> Self {
14        let ret = unsafe { ffi::vaal_strerror(value) };
15        if ret.is_null() {
16            return Error::Null();
17        }
18        let desc = unsafe { CStr::from_ptr(ret) };
19        match desc.to_str() {
20            Ok(estr) => return Error::VAALError(estr),
21            Err(_) => return Error::Null(),
22        }
23    }
24}
25
26impl fmt::Display for Error {
27    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
28        match self {
29            Error::VAALError(e) => return write!(f, "{}", e),
30            Error::WrapperError(e) => return write!(f, "{}", e),
31            Error::Null() => return write!(f, "null/unknown error message unavailable"),
32            Error::IoError(kind) => {
33                let e = std::io::Error::from(*kind);
34                return write!(f, "{}", e);
35            }
36        }
37    }
38}
39
40impl std::error::Error for Error {}