use thiserror::Error;
#[derive(Debug, serde::Deserialize)]
pub struct GraphqlError {
pub message: String,
#[serde(default)]
pub extensions: Option<serde_json::Value>,
}
impl std::fmt::Display for GraphqlError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.message)
}
}
#[derive(Debug, Error)]
pub enum Error {
#[error("HTTP error: {0}")]
Http(#[from] reqwest::Error),
#[error("GraphQL errors: {}", format_errors(.0))]
GraphQL(Vec<GraphqlError>),
}
fn format_errors(errors: &[GraphqlError]) -> String {
errors
.iter()
.map(|e| e.message.as_str())
.collect::<Vec<_>>()
.join(", ")
}