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), #[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 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 for AppError { fn from(err: rquest::Error) -> Self { let status = err.status().map(|s| s.as_u16()); AppError::Network(err.to_string(), status) } } // Implement Serialize so it can be used as a return value for Tauri commands impl Serialize for AppError { fn serialize(&self, serializer: S) -> Result where S: serde::Serializer, { serializer.serialize_str(self.to_string().as_str()) } } // Implement alias for Result to simplify usage pub type AppResult = Result;