use std::collections::HashMap;
use fedora::reqwest;
use fedora::url;
use serde::Deserialize;
#[derive(Debug, Deserialize, thiserror::Error)]
pub struct BodhiError {
pub errors: Vec<HashMap<String, String>>,
pub status: String,
}
impl std::fmt::Display for BodhiError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
write!(f, "{self:#?}")
}
}
#[derive(Debug, thiserror::Error)]
pub enum QueryError {
#[error("Not found")]
NotFound,
#[error("Invalid / empty server response")]
EmptyResponse,
#[error("Failed to query bodhi service: {error}")]
RequestError {
#[from]
error: reqwest::Error,
},
#[error("Failed to deserialize JSON response: {error}")]
DeserializationError {
error: serde_json::Error,
},
#[error("Failed to serialize POST request data: {error}")]
SerializationError {
error: serde_json::Error,
},
#[error("Failed to compute request URL: {error}")]
UrlParsingError {
#[from]
error: url::ParseError,
},
#[error("Remote bodhi instance returned an error message: {error}")]
BodhiError {
error: BodhiError,
},
#[error("Failed to construct `x-www-urlencoded` query string: {error}")]
UrlEncodedError {
#[from]
error: serde_url_params::Error,
},
#[error("Invalid data: {error}")]
InvalidDataError {
error: String,
},
}
impl From<serde_json::Error> for QueryError {
fn from(error: serde_json::Error) -> Self {
QueryError::DeserializationError { error }
}
}