use reqwest::StatusCode;
use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("API secret is required for signed calls")]
MissingApiSecret,
#[error("Last.fm API error: {0}")]
LastFm(#[from] ErrorResponse),
#[error("HTTP error {status}: {text}")]
Http { status: StatusCode, text: String },
#[error("Request error: {0}")]
Request(#[from] reqwest::Error),
#[error("JSON deserialization error: {0}")]
Json(#[from] serde_json::Error),
#[error("URL parse error: {0}")]
UrlParse(#[from] url::ParseError),
}
#[derive(Debug, Serialize, Deserialize, Eq, PartialEq, Clone)]
pub struct ErrorResponse {
pub error: u32,
pub message: String,
}
impl fmt::Display for ErrorResponse {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "Error {}: {}", self.error, self.message)
}
}
impl std::error::Error for ErrorResponse {}