1use std::error::Error;
2use std::fmt::{Display, Formatter};
3
4#[derive(Debug)]
6pub enum CradleError {
7 IoError(std::io::Error),
9 SpawnError(i32),
11 InvalidPath,
13 InvalidHost,
15 WindowsError(i32),
17 InvalidValue(String),
19 ModuleNotFound(String),
21 LibloadError(String),
23 PluginLoadError(String),
25}
26
27impl Display for CradleError {
28 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
29 match self {
30 CradleError::IoError(e) => write!(f, "{e}"),
31 CradleError::SpawnError(e) => write!(f, "a spawn error occurred. Code: 0x{e:.x} ({e})"),
32 CradleError::InvalidPath => write!(f, "invalid path"),
33 CradleError::InvalidHost => write!(f, "invalid host"),
34 CradleError::WindowsError(e) => write!(f, "windows error: {e}"),
35 CradleError::InvalidValue(e) => write!(f, "invalid value: {e}"),
36 CradleError::ModuleNotFound(e) => write!(f, "module not found: {e}"),
37 CradleError::LibloadError(e) => write!(f, "libloading error: {e}"),
38 CradleError::PluginLoadError(e) => write!(f, "plugin loading error: {e}"),
39 }
40 }
41}
42
43pub type CradleResult<T = ()> = Result<T, CradleError>;
45
46impl Error for CradleError {}
47impl From<std::io::Error> for CradleError {
48 fn from(e: std::io::Error) -> Self {
49 CradleError::IoError(e)
50 }
51}
52
53impl From<CradleError> for std::io::Error {
54 fn from(e: CradleError) -> Self {
55 std::io::Error::other(e)
56 }
57}