1use crate::functions::{ApiError, ApiWrapperError, ProgramBuildError, VersionLowError};
5use crate::util::UtilError;
6use crate::{EmptyInfoResultError, Status};
7
8pub type Result<T> = ::std::result::Result<T, Error>;
10
11#[derive(Debug, thiserror::Error)]
13pub enum Error {
14 #[error("{0}")]
21 String(String),
22 #[error("{0}")]
24 FfiNul(#[from] ::std::ffi::NulError),
25 #[error("{0}")]
27 Io(#[from] ::std::io::Error),
28 #[error("{0}")]
30 FromUtf8(#[from] ::std::string::FromUtf8Error),
31 #[error("{0}")]
33 IntoString(#[from] ::std::ffi::IntoStringError),
34 #[error("{0}")]
36 EmptyInfoResult(EmptyInfoResultError),
37 #[error("{0}")]
39 Util(UtilError),
40 #[error("{0}")]
42 Api(ApiError),
43 #[error("{0}")]
45 VersionLow(VersionLowError),
46 #[error("{0}")]
48 ProgramBuild(ProgramBuildError),
49 #[error("{0}")]
51 ApiWrapper(ApiWrapperError),
52}
53
54impl Error {
55 pub fn api_status(&self) -> Option<Status> {
57 match *self {
58 Error::Api(ref err) => Some(err.status()),
59 _ => None,
60 }
61 }
62}
63
64impl<'a> From<&'a str> for Error {
66 fn from(desc: &'a str) -> Self {
67 Error::String(String::from(desc))
68 }
69}
70
71impl From<String> for Error {
73 fn from(desc: String) -> Self {
74 Error::String(desc)
75 }
76}
77
78impl From<UtilError> for Error {
79 fn from(err: UtilError) -> Self {
80 Error::Util(err)
81 }
82}
83
84impl From<ApiError> for Error {
85 fn from(err: ApiError) -> Self {
86 Error::Api(err)
87 }
88}
89
90impl From<VersionLowError> for Error {
91 fn from(err: VersionLowError) -> Self {
92 Error::VersionLow(err)
93 }
94}
95
96impl From<ProgramBuildError> for Error {
97 fn from(err: ProgramBuildError) -> Self {
98 Error::ProgramBuild(err)
99 }
100}
101
102impl From<ApiWrapperError> for Error {
103 fn from(err: ApiWrapperError) -> Self {
104 Error::ApiWrapper(err)
105 }
106}