use std::fmt;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("GraphQL error in {query_name}: {messages}")]
Graphql {
query_name: String,
messages: String,
errors: Vec<GraphqlErrorEntry>,
},
#[error("failed to execute {query_name} after {attempts} attempts: {source}")]
Connection {
query_name: String,
attempts: u32,
#[source]
source: reqwest::Error,
},
#[error("missing field '{field}' in {query_name} response")]
MissingField { query_name: String, field: String },
#[error("currency underflow: {0} - {1} would be negative")]
CurrencyUnderflow(u64, u64),
#[error("invalid currency format: {0}")]
InvalidCurrency(String),
#[error("account not found: {0}")]
AccountNotFound(String),
}
#[derive(Debug, Clone)]
pub struct GraphqlErrorEntry {
pub message: String,
}
impl fmt::Display for GraphqlErrorEntry {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.message)
}
}
pub type Result<T> = std::result::Result<T, Error>;