1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Serialize, Deserialize)]
4pub(crate) struct ESearchResult {
5 pub esearchresult: ESearchData,
6}
7
8#[derive(Debug, Serialize, Deserialize)]
9pub(crate) struct ESearchData {
10 #[serde(default, rename = "ERROR")]
11 pub error: Option<String>,
12 #[serde(default)]
13 pub count: Option<String>,
14 #[serde(default)]
15 pub retmax: Option<String>,
16 #[serde(default)]
17 pub retstart: Option<String>,
18 #[serde(default)]
19 pub idlist: Vec<String>,
20 #[serde(default)]
22 pub webenv: Option<String>,
23 #[serde(default, rename = "querykey")]
25 pub query_key: Option<String>,
26 #[serde(default)]
28 pub querytranslation: Option<String>,
29}
30
31#[derive(Debug, Serialize, Deserialize)]
33pub(crate) struct EPostResponse {
34 pub epostresult: EPostData,
35}
36
37#[derive(Debug, Serialize, Deserialize)]
38pub(crate) struct EPostData {
39 #[serde(default)]
40 pub webenv: Option<String>,
41 #[serde(default, rename = "querykey")]
42 pub query_key: Option<String>,
43 #[serde(default, rename = "ERROR")]
44 pub error: Option<String>,
45}
46
47#[derive(Debug, Serialize, Deserialize)]
49pub(crate) struct EInfoResponse {
50 #[serde(rename = "einforesult")]
51 pub einfo_result: EInfoResult,
52}
53
54#[derive(Debug, Serialize, Deserialize)]
55pub(crate) struct EInfoResult {
56 #[serde(rename = "dblist", default)]
57 pub db_list: Option<Vec<String>>,
58 #[serde(rename = "dbinfo", default)]
59 pub db_info: Option<Vec<EInfoDbInfo>>,
60}
61
62#[derive(Debug, Serialize, Deserialize)]
63pub(crate) struct EInfoDbInfo {
64 #[serde(rename = "dbname")]
65 pub db_name: String,
66 #[serde(rename = "menuname")]
67 pub menu_name: String,
68 #[serde(rename = "description")]
69 pub description: String,
70 #[serde(rename = "dbbuild")]
71 pub db_build: Option<String>,
72 #[serde(rename = "count")]
73 pub count: Option<String>,
74 #[serde(rename = "lastupdate")]
75 pub last_update: Option<String>,
76 #[serde(rename = "fieldlist")]
77 pub field_list: Option<Vec<EInfoField>>,
78 #[serde(rename = "linklist")]
79 pub link_list: Option<Vec<EInfoLink>>,
80}
81
82#[derive(Debug, Serialize, Deserialize)]
83pub(crate) struct EInfoField {
84 #[serde(rename = "name")]
85 pub name: String,
86 #[serde(rename = "fullname")]
87 pub full_name: String,
88 #[serde(rename = "description")]
89 pub description: String,
90 #[serde(rename = "termcount")]
91 pub term_count: Option<String>,
92 #[serde(rename = "isdate")]
93 pub is_date: Option<String>,
94 #[serde(rename = "isnumerical")]
95 pub is_numerical: Option<String>,
96 #[serde(rename = "singletoken")]
97 pub single_token: Option<String>,
98 #[serde(rename = "hierarchy")]
99 pub hierarchy: Option<String>,
100 #[serde(rename = "ishidden")]
101 pub is_hidden: Option<String>,
102}
103
104#[derive(Debug, Serialize, Deserialize)]
105pub(crate) struct EInfoLink {
106 #[serde(rename = "name")]
107 pub name: String,
108 #[serde(rename = "menu")]
109 pub menu: String,
110 #[serde(rename = "description")]
111 pub description: String,
112 #[serde(rename = "dbto")]
113 pub db_to: String,
114}
115
116#[derive(Debug, Serialize, Deserialize)]
121pub(crate) struct ESummaryResponse {
122 pub result: serde_json::Value,
123}
124
125#[derive(Debug, Serialize, Deserialize)]
126pub(crate) struct ESummaryAuthor {
127 pub name: String,
128 #[serde(default)]
129 pub authtype: String,
130}
131
132#[derive(Debug, Serialize, Deserialize)]
133pub(crate) struct ESummaryArticleId {
134 pub idtype: String,
135 #[serde(default)]
136 pub value: String,
137}
138
139#[derive(Debug, Serialize, Deserialize)]
140pub(crate) struct ESummaryDocSum {
141 pub uid: String,
142 #[serde(default)]
143 pub title: String,
144 #[serde(default, rename = "sorttitle")]
145 pub sort_title: String,
146 #[serde(default)]
147 pub source: String,
148 #[serde(default)]
149 pub authors: Vec<ESummaryAuthor>,
150 #[serde(default)]
151 pub pubdate: String,
152 #[serde(default)]
153 pub epubdate: String,
154 #[serde(default)]
155 pub volume: String,
156 #[serde(default)]
157 pub issue: String,
158 #[serde(default)]
159 pub pages: String,
160 #[serde(default)]
161 pub lang: Vec<String>,
162 #[serde(default)]
163 pub issn: String,
164 #[serde(default)]
165 pub essn: String,
166 #[serde(default)]
167 pub pubtype: Vec<String>,
168 #[serde(default)]
169 pub articleids: Vec<ESummaryArticleId>,
170 #[serde(default)]
171 pub fulljournalname: String,
172 #[serde(default)]
173 pub sortpubdate: String,
174 #[serde(default)]
175 pub pmcrefcount: u64,
176 #[serde(default)]
177 pub recordstatus: String,
178}
179
180#[derive(Debug, Serialize, Deserialize)]
182pub(crate) struct ELinkResponse {
183 #[serde(rename = "linksets")]
184 pub linksets: Vec<ELinkSet>,
185}
186
187#[derive(Debug, Serialize, Deserialize)]
188pub(crate) struct ELinkSet {
189 #[serde(rename = "dbfrom")]
190 pub db_from: String,
191 #[serde(rename = "ids")]
192 pub ids: Vec<String>,
193 #[serde(rename = "linksetdbs", default)]
194 pub linkset_dbs: Option<Vec<ELinkSetDb>>,
195}
196
197#[derive(Debug, Serialize, Deserialize)]
198pub(crate) struct ELinkSetDb {
199 #[serde(rename = "dbto")]
200 pub db_to: String,
201 #[serde(rename = "linkname")]
202 pub link_name: String,
203 #[serde(rename = "links")]
204 pub links: Vec<String>,
205}