use std::io;
#[derive(Debug)]
pub enum FavCoreError {
AuthError,
ParamsError(String),
NetworkError(reqwest::Error),
Cancel,
UtilsError(Box<dyn std::error::Error + Send>),
SerdeError(serde_json::Error),
SerdePointerNotFound,
Json2ProtobufError(protobuf_json_mapping::ParseError),
ProtobufError(protobuf::Error),
IoError(std::io::Error),
IdNotUsable(String),
}
impl std::fmt::Display for FavCoreError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
FavCoreError::AuthError => write!(f, "AuthErr: failed to login or logout"),
FavCoreError::ParamsError(msg) => write!(f, "{}", msg),
FavCoreError::NetworkError(source) => write!(f, "NetworkErr:: {}", source),
FavCoreError::Cancel => write!(f, "Ctrl-C cancelled"),
FavCoreError::UtilsError(source) => write!(f, "UtilsErr: {}", source),
FavCoreError::SerdeError(source) => write!(f, "SerdeErr:: {}", source),
FavCoreError::SerdePointerNotFound => write!(f, "SerdeErr:: pointer not found"),
FavCoreError::Json2ProtobufError(source) => write!(f, "ProtobufParseErr: {}", source),
FavCoreError::ProtobufError(source) => write!(f, "ProtobufError: {}", source),
FavCoreError::IoError(source) => {
write!(f, "IOErr: {}; Maybe you didn't run `fav init` or have no permission to write .fav", source)
}
FavCoreError::IdNotUsable(source) => {
write!(
f,
"Id<{}> not usable; Or maybe the resource is expired",
source
)
}
}
}
}
impl From<reqwest::Error> for FavCoreError {
fn from(err: reqwest::Error) -> Self {
FavCoreError::NetworkError(err)
}
}
impl From<serde_json::Error> for FavCoreError {
fn from(err: serde_json::Error) -> Self {
FavCoreError::SerdeError(err)
}
}
impl From<protobuf_json_mapping::ParseError> for FavCoreError {
fn from(err: protobuf_json_mapping::ParseError) -> Self {
FavCoreError::Json2ProtobufError(err)
}
}
impl From<protobuf::Error> for FavCoreError {
fn from(err: protobuf::Error) -> Self {
FavCoreError::ProtobufError(err)
}
}
impl From<io::Error> for FavCoreError {
fn from(err: io::Error) -> Self {
FavCoreError::IoError(err)
}
}
impl std::error::Error for FavCoreError {}
pub type FavCoreResult<T> = Result<T, FavCoreError>;