error code added to CtxError::Other
@@ -4,19 +4,28 @@ use serde::Serialize;
use std::error::Error;
use std::fmt;
+#[derive(Debug, Clone)]
+pub enum OtherError {
+ UserNotLoggedIn,
+ LibraryItemNotFound,
+ AddonAlreadyInstalled,
+}
+
#[derive(Debug, Clone, Serialize)]
#[serde(tag = "type")]
pub enum CtxError {
API { message: String, code: u64 },
Env { message: String },
- Other { message: String },
+ Other { message: String, code: u64 },
}
impl fmt::Display for CtxError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match &self {
- CtxError::API { message, code } => write!(f, "{} {}", message, code),
- CtxError::Env { message } | CtxError::Other { message } => write!(f, "{}", message),
+ CtxError::API { message, code } | CtxError::Other { message, code } => {
+ write!(f, "{} {}", message, code)
+ }
+ CtxError::Env { message } => write!(f, "{}", message),
}
}
}
@@ -26,7 +35,7 @@ impl Error for CtxError {
match &self {
CtxError::API { message, .. }
| CtxError::Env { message }
- | CtxError::Other { message } => message,
+ | CtxError::Other { message, .. } => message,
}
}
}
@@ -48,10 +57,19 @@ impl From<EnvError> for CtxError {
}
}
-impl From<&str> for CtxError {
- fn from(message: &str) -> Self {
+impl From<OtherError> for CtxError {
+ fn from(error: OtherError) -> Self {
CtxError::Other {
- message: message.to_string(),
+ code: match &error {
+ OtherError::UserNotLoggedIn => 800,
+ OtherError::LibraryItemNotFound => 801,
+ OtherError::AddonAlreadyInstalled => 802,
+ },
+ message: match &error {
+ OtherError::UserNotLoggedIn => "User is not logged in".to_owned(),
+ OtherError::LibraryItemNotFound => "Item is not found in library".to_owned(),
+ OtherError::AddonAlreadyInstalled => "Addon is already installed".to_owned(),
+ },
}
}
}
