| use serde::Serialize; |
| use thiserror::Error; |
|
|
| #[derive(Error, Debug)] |
| pub enum AppError { |
| #[error("Database error: {0}")] |
| Database(#[from] rusqlite::Error), |
|
|
| #[error("Network error: {0}")] |
| Network(String, Option<u16>), |
|
|
| #[error("IO error: {0}")] |
| Io(#[from] std::io::Error), |
|
|
| #[error("Tauri error: {0}")] |
| Tauri(#[from] tauri::Error), |
|
|
| #[error("OAuth error: {0}")] |
| OAuth(String), |
|
|
| #[error("Configuration error: {0}")] |
| Config(String), |
|
|
| #[error("Account error: {0}")] |
| Account(String), |
|
|
| #[error("Unknown error: {0}")] |
| Unknown(String), |
| } |
|
|
| impl From<reqwest::Error> for AppError { |
| fn from(err: reqwest::Error) -> Self { |
| let status = err.status().map(|s| s.as_u16()); |
| AppError::Network(err.to_string(), status) |
| } |
| } |
|
|
| impl From<rquest::Error> for AppError { |
| fn from(err: rquest::Error) -> Self { |
| let status = err.status().map(|s| s.as_u16()); |
| AppError::Network(err.to_string(), status) |
| } |
| } |
|
|
| |
| impl Serialize for AppError { |
| fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> |
| where |
| S: serde::Serializer, |
| { |
| serializer.serialize_str(self.to_string().as_str()) |
| } |
| } |
|
|
| |
| pub type AppResult<T> = Result<T, AppError>; |
|
|