open_library/
clients.rs

1use crate::models::OpenLibraryModel;
2use crate::OpenLibraryError;
3use http::StatusCode;
4use reqwest::RequestBuilder;
5use serde::Deserialize;
6
7pub mod account;
8pub mod author;
9pub mod books;
10pub mod works;
11
12#[cfg(test)]
13mod tests;
14
15pub async fn handle<T>(request: RequestBuilder) -> Result<T, OpenLibraryError>
16where
17    T: for<'de> Deserialize<'de> + OpenLibraryModel,
18{
19    let response = request.send().await?;
20
21    return match response.status() {
22        StatusCode::OK => Ok(response
23            .json::<T>()
24            .await
25            .map_err(|error| OpenLibraryError::JsonParseError { source: error })?),
26        _ => Err(OpenLibraryError::ApiError {
27            status_code: response.status(),
28            error: None,
29        }),
30    };
31}