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}