firebase_user/
error.rs

1use reqwest::Response;
2use serde::{Deserialize, de::DeserializeOwned};
3use thiserror::Error;
4
5#[derive(Error, Debug)]
6pub enum ApiError {
7    #[error("Fail `{0:?}`")]
8    Fail(FailError),
9    #[error("Fail `{0}`")]
10    Reqwest(#[from] reqwest::Error),
11}
12
13#[derive(Debug, Deserialize)]
14struct FailResponse {
15    error: FailError,
16}
17
18#[derive(Debug, Deserialize)]
19pub struct FailError {
20    pub code: u16,
21    pub message: String,
22}
23
24pub(crate) async fn check_response<T: DeserializeOwned>(response: Response) -> Result<T, ApiError> {
25    if response.status() != 200 {
26        let error = response.json::<FailResponse>().await?;
27
28        Err(ApiError::Fail(error.error))
29    } else {
30        response.json().await.map_err(Into::into)
31    }
32}