use crate::client::OpenLibraryClient;
use crate::error::Result;
use crate::models::list::{List, ListEditions, ListSeeds, ListSubjects, UserLists};
use crate::validation::{validate_limit, validate_list_id, validate_username};
impl OpenLibraryClient {
pub async fn get_user_lists(
&self,
username: &str,
limit: u32,
offset: u32,
) -> Result<UserLists> {
validate_username(username)?;
validate_limit(limit)?;
let mut url = self
.base_url
.join(&format!("people/{username}/lists.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_list(&self, username: &str, list_id: &str) -> Result<List> {
validate_username(username)?;
validate_list_id(list_id)?;
let url = self
.base_url
.join(&format!("people/{username}/lists/{list_id}.json"))?;
self.get_json(url).await
}
pub async fn get_list_editions(
&self,
username: &str,
list_id: &str,
limit: u32,
offset: u32,
) -> Result<ListEditions> {
validate_username(username)?;
validate_list_id(list_id)?;
validate_limit(limit)?;
let mut url = self
.base_url
.join(&format!("people/{username}/lists/{list_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_list_subjects(&self, username: &str, list_id: &str) -> Result<ListSubjects> {
validate_username(username)?;
validate_list_id(list_id)?;
let url = self
.base_url
.join(&format!("people/{username}/lists/{list_id}/subjects.json"))?;
self.get_json(url).await
}
pub async fn get_list_seeds(&self, username: &str, list_id: &str) -> Result<ListSeeds> {
validate_username(username)?;
validate_list_id(list_id)?;
let url = self
.base_url
.join(&format!("people/{username}/lists/{list_id}/seeds.json"))?;
self.get_json(url).await
}
}