use thiserror::Error;
#[derive(Error, Debug)]
pub enum QobuzApiError {
#[error("API Error - Code: {code}, Message: {message}, Status: {status}")]
ApiErrorResponse {
code: String,
message: String,
status: String,
},
#[error("Failed to parse API response: {source}")]
ApiResponseParseError {
content: String,
#[source]
source: serde_json::Error,
},
#[error("Qobuz API initialization error: {message}")]
QobuzApiInitializationError {
message: String,
},
#[error("HTTP request error: {0}")]
HttpError(#[from] reqwest::Error),
#[error("Network/IO error: {0}")]
IoError(#[from] std::io::Error),
#[error("Lofty metadata error: {0}")]
LoftyError(#[from] lofty::error::LoftyError),
#[error("URL parsing error: {0}")]
UrlError(#[from] url::ParseError),
#[error("Authentication error: {message}")]
AuthenticationError {
message: String,
},
#[error("Missing or invalid credentials: {message}")]
CredentialsError {
message: String,
},
#[error("Download error: {message}")]
DownloadError {
message: String,
},
#[error("Metadata processing error: {source}")]
MetadataError {
#[source]
source: Box<dyn std::error::Error + Send + Sync>,
},
#[error("Resource not found: {resource_type} with ID {resource_id}")]
ResourceNotFoundError {
resource_type: String,
resource_id: String,
},
#[error("Rate limit exceeded: {message}")]
RateLimitError {
message: String,
},
#[error("Invalid parameter: {message}")]
InvalidParameterError {
message: String,
},
#[error("Unexpected API response format: {message}")]
UnexpectedApiResponseError {
message: String,
},
}