use crate::client::OpenLibraryClient;
use crate::error::Result;
use crate::models::work::{Work, WorkBookshelves, WorkEditions, WorkRatings};
use crate::validation::{validate_limit, validate_work_id};
impl OpenLibraryClient {
pub async fn get_work(&self, id: &str) -> Result<Work> {
validate_work_id(id)?;
let url = self.base_url.join(&format!("works/{id}.json"))?;
self.get_json(url).await
}
pub async fn get_work_editions(
&self,
id: &str,
limit: u32,
offset: u32,
) -> Result<WorkEditions> {
validate_work_id(id)?;
validate_limit(limit)?;
let mut url = self.base_url.join(&format!("works/{id}/editions.json"))?;
url.query_pairs_mut()
.append_pair("limit", &limit.to_string())
.append_pair("offset", &offset.to_string());
self.get_json(url).await
}
pub async fn get_work_ratings(&self, id: &str) -> Result<WorkRatings> {
validate_work_id(id)?;
let url = self.base_url.join(&format!("works/{id}/ratings.json"))?;
self.get_json(url).await
}
pub async fn get_work_bookshelves(&self, id: &str) -> Result<WorkBookshelves> {
validate_work_id(id)?;
let url = self.base_url.join(&format!("works/{id}/bookshelves.json"))?;
self.get_json(url).await
}
}