1use std::ffi::NulError;
5use std::io::Error as IoError;
6use std::num::ParseIntError;
7use std::num::TryFromIntError;
8use std::str::Utf8Error;
9
10use remain::sorted;
11use rustix::io::Errno as RustixError;
12use thiserror::Error;
13
14#[sorted]
16#[derive(Error, Debug)]
17pub enum Error {
18 #[error("invalid handle")]
20 InvalidMagmaHandle,
21 #[error("an input/output error occurred: {0}")]
23 IoError(IoError),
24 #[error("Nul Error occurred {0}")]
26 NulError(NulError),
27 #[error("int parsing failed: {0}")]
29 ParseIntError(ParseIntError),
30 #[error("The errno is {0}")]
32 RustixError(RustixError),
33 #[error("int conversion failed: {0}")]
35 TryFromIntError(TryFromIntError),
36 #[error("the requested function is not implemented")]
38 Unsupported,
39 #[error("an utf8 error occurred: {0}")]
41 Utf8Error(Utf8Error),
42 #[error("operation failed: {0}")]
44 WithContext(&'static str),
45}
46
47#[cfg(any(target_os = "android", target_os = "linux"))]
48impl From<RustixError> for Error {
49 fn from(e: RustixError) -> Error {
50 Error::RustixError(e)
51 }
52}
53
54impl From<NulError> for Error {
55 fn from(e: NulError) -> Error {
56 Error::NulError(e)
57 }
58}
59
60impl From<IoError> for Error {
61 fn from(e: IoError) -> Error {
62 Error::IoError(e)
63 }
64}
65
66impl From<ParseIntError> for Error {
67 fn from(e: ParseIntError) -> Error {
68 Error::ParseIntError(e)
69 }
70}
71
72impl From<TryFromIntError> for Error {
73 fn from(e: TryFromIntError) -> Error {
74 Error::TryFromIntError(e)
75 }
76}
77
78impl From<Utf8Error> for Error {
79 fn from(e: Utf8Error) -> Error {
80 Error::Utf8Error(e)
81 }
82}
83
84pub type Result<T> = std::result::Result<T, Error>;