Skip to main content

open_library_api_rs/models/
search.rs

1// v0.0.1
2use serde::{Deserialize, Serialize};
3
4/// Generic paginated search response wrapper.
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct SearchResponse<T> {
7    #[serde(default)]
8    pub num_found: u64,
9    #[serde(default)]
10    pub start: u64,
11    #[serde(default)]
12    pub num_found_exact: bool,
13    #[serde(default)]
14    pub docs: Vec<T>,
15}
16
17/// A book/work document returned by `/search.json`.
18#[derive(Debug, Clone, Default, Serialize, Deserialize)]
19pub struct BookDoc {
20    pub key: String,
21    #[serde(default)]
22    pub title: Option<String>,
23    #[serde(default)]
24    pub subtitle: Option<String>,
25    #[serde(default)]
26    pub author_name: Option<Vec<String>>,
27    #[serde(default)]
28    pub author_key: Option<Vec<String>>,
29    #[serde(default)]
30    pub cover_i: Option<i64>,
31    #[serde(default)]
32    pub cover_edition_key: Option<String>,
33    #[serde(default)]
34    pub first_publish_year: Option<i32>,
35    #[serde(default)]
36    pub isbn: Option<Vec<String>>,
37    #[serde(default)]
38    pub lccn: Option<Vec<String>>,
39    #[serde(default)]
40    pub oclc: Option<Vec<String>>,
41    #[serde(default)]
42    pub ia: Option<Vec<String>>,
43    #[serde(default)]
44    pub has_fulltext: bool,
45    #[serde(default)]
46    pub public_scan_b: bool,
47    #[serde(default)]
48    pub edition_count: u32,
49    #[serde(default)]
50    pub language: Option<Vec<String>>,
51    #[serde(default)]
52    pub publisher: Option<Vec<String>>,
53    #[serde(default)]
54    pub subject: Option<Vec<String>>,
55    #[serde(default)]
56    pub subject_facet: Option<Vec<String>>,
57    #[serde(default)]
58    pub place: Option<Vec<String>>,
59    #[serde(default)]
60    pub person: Option<Vec<String>>,
61    #[serde(default)]
62    pub time: Option<Vec<String>>,
63}
64
65/// An author document returned by `/search/authors.json`.
66#[derive(Debug, Clone, Default, Serialize, Deserialize)]
67pub struct AuthorDoc {
68    pub key: String,
69    #[serde(default)]
70    pub name: Option<String>,
71    #[serde(default)]
72    pub alternate_names: Option<Vec<String>>,
73    #[serde(default)]
74    pub birth_date: Option<String>,
75    #[serde(default)]
76    pub death_date: Option<String>,
77    #[serde(default)]
78    pub top_work: Option<String>,
79    #[serde(default)]
80    pub work_count: Option<u32>,
81    #[serde(default)]
82    pub top_subjects: Option<Vec<String>>,
83}
84
85/// A subject document returned by `/search/subjects.json`.
86#[derive(Debug, Clone, Default, Serialize, Deserialize)]
87pub struct SubjectDoc {
88    pub key: String,
89    #[serde(default)]
90    pub name: Option<String>,
91    #[serde(default)]
92    pub subject_type: Option<String>,
93    #[serde(default)]
94    pub work_count: Option<u64>,
95}
96
97/// A list document returned by `/search/lists.json`.
98#[derive(Debug, Clone, Default, Serialize, Deserialize)]
99pub struct ListDoc {
100    pub key: String,
101    #[serde(default)]
102    pub name: Option<String>,
103    #[serde(default)]
104    pub edition_count: Option<u32>,
105    #[serde(default)]
106    pub seed_count: Option<u32>,
107}
108
109/// A document returned by `/search/inside.json`.
110#[derive(Debug, Clone, Default, Serialize, Deserialize)]
111pub struct InsideDoc {
112    #[serde(default)]
113    pub ia: Option<String>,
114    #[serde(default)]
115    pub title: Option<String>,
116    #[serde(default)]
117    pub author: Option<String>,
118    #[serde(default)]
119    pub text: Option<String>,
120}
121
122/// Parameters for the main book search endpoint.
123#[derive(Debug, Clone, Default)]
124pub struct SearchParams {
125    pub q: Option<String>,
126    pub title: Option<String>,
127    pub author: Option<String>,
128    pub isbn: Option<String>,
129    pub subject: Option<String>,
130    pub place: Option<String>,
131    pub person: Option<String>,
132    pub language: Option<String>,
133    pub publisher: Option<String>,
134    pub page: Option<u32>,
135    pub limit: Option<u32>,
136    pub offset: Option<u32>,
137    pub sort: Option<String>,
138    pub fields: Option<String>,
139    pub lang: Option<String>,
140}
141
142/// Parameters for the author search endpoint.
143#[derive(Debug, Clone, Default)]
144pub struct AuthorSearchParams {
145    pub q: Option<String>,
146    pub limit: Option<u32>,
147    pub offset: Option<u32>,
148}
149
150/// Parameters for the subject search endpoint.
151#[derive(Debug, Clone, Default)]
152pub struct SubjectParams {
153    pub details: Option<bool>,
154    pub ebooks: Option<bool>,
155    pub published_in: Option<String>,
156    pub limit: Option<u32>,
157    pub offset: Option<u32>,
158}