open_library_api_rs/api/
lists.rs1use crate::client::OpenLibraryClient;
3use crate::error::Result;
4use crate::models::list::{List, ListEditions, ListSeeds, ListSubjects, UserLists};
5use crate::validation::{validate_limit, validate_list_id, validate_username};
6
7impl OpenLibraryClient {
8 pub async fn get_user_lists(
10 &self,
11 username: &str,
12 limit: u32,
13 offset: u32,
14 ) -> Result<UserLists> {
15 validate_username(username)?;
16 validate_limit(limit)?;
17 let mut url = self
18 .base_url
19 .join(&format!("people/{username}/lists.json"))?;
20 url.query_pairs_mut()
21 .append_pair("limit", &limit.to_string())
22 .append_pair("offset", &offset.to_string());
23 self.get_json(url).await
24 }
25
26 pub async fn get_list(&self, username: &str, list_id: &str) -> Result<List> {
28 validate_username(username)?;
29 validate_list_id(list_id)?;
30 let url = self
31 .base_url
32 .join(&format!("people/{username}/lists/{list_id}.json"))?;
33 self.get_json(url).await
34 }
35
36 pub async fn get_list_editions(
38 &self,
39 username: &str,
40 list_id: &str,
41 limit: u32,
42 offset: u32,
43 ) -> Result<ListEditions> {
44 validate_username(username)?;
45 validate_list_id(list_id)?;
46 validate_limit(limit)?;
47 let mut url = self
48 .base_url
49 .join(&format!("people/{username}/lists/{list_id}/editions.json"))?;
50 url.query_pairs_mut()
51 .append_pair("limit", &limit.to_string())
52 .append_pair("offset", &offset.to_string());
53 self.get_json(url).await
54 }
55
56 pub async fn get_list_subjects(&self, username: &str, list_id: &str) -> Result<ListSubjects> {
58 validate_username(username)?;
59 validate_list_id(list_id)?;
60 let url = self
61 .base_url
62 .join(&format!("people/{username}/lists/{list_id}/subjects.json"))?;
63 self.get_json(url).await
64 }
65
66 pub async fn get_list_seeds(&self, username: &str, list_id: &str) -> Result<ListSeeds> {
68 validate_username(username)?;
69 validate_list_id(list_id)?;
70 let url = self
71 .base_url
72 .join(&format!("people/{username}/lists/{list_id}/seeds.json"))?;
73 self.get_json(url).await
74 }
75}