use thiserror::Error;
#[derive(Error, Debug)]
pub enum MegaError {
#[error("HTTP error: {0}")]
HttpError(u16),
#[error("Request error: {0}")]
RequestError(#[from] reqwest::Error),
#[error("JSON error: {0}")]
JsonError(#[from] serde_json::Error),
#[error("Server busy, try again later")]
ServerBusy,
#[error("Invalid response from server")]
InvalidResponse,
#[error("API error: {code} - {message}")]
ApiError { code: i32, message: String },
#[error("Crypto error: {0}")]
CryptoError(String),
#[error("Invalid challenge response")]
InvalidChallenge,
#[error("Base64 decode error: {0}")]
Base64Error(#[from] base64::DecodeError),
#[error("Potential downgrade detected for ^!keys")]
DowngradeDetected,
#[error("Invalid state format: {0}")]
InvalidState(String),
#[error("{0}")]
Custom(String),
}
pub type Result<T> = std::result::Result<T, MegaError>;