38 lines
1000 B
Rust
38 lines
1000 B
Rust
|
use graphql_client_web::Response;
|
||
|
|
||
|
use crate::error::UiError;
|
||
|
|
||
|
pub mod auth;
|
||
|
pub mod dicebot;
|
||
|
|
||
|
/// Extensions to the GraphQL web response type to add convenience,
|
||
|
/// particularly when working with errors.
|
||
|
trait ResponseExt<T> {
|
||
|
/// Get the data from the response, or gather all server-side
|
||
|
/// errors into a UiError variant.
|
||
|
fn data(self) -> Result<T, UiError>;
|
||
|
}
|
||
|
|
||
|
impl<T> ResponseExt<T> for Response<T> {
|
||
|
fn data(self) -> Result<T, UiError> {
|
||
|
let data = self.data;
|
||
|
let errors = self.errors;
|
||
|
|
||
|
let data = data.ok_or_else(|| {
|
||
|
UiError::ApiError(
|
||
|
errors
|
||
|
.map(|errors| {
|
||
|
errors
|
||
|
.into_iter()
|
||
|
.map(|e| e.to_string())
|
||
|
.collect::<Vec<_>>()
|
||
|
.join(",")
|
||
|
})
|
||
|
.unwrap_or("unknown error".into()),
|
||
|
)
|
||
|
})?;
|
||
|
|
||
|
Ok(data)
|
||
|
}
|
||
|
}
|