1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
5#[serde(rename_all = "lowercase")]
6#[non_exhaustive]
7pub enum Category {
8 Markets,
10 Economy,
12 Business,
14 Politics,
16 Geopolitics,
18 Regulation,
20 Technology,
22 Energy,
24 Commodities,
26 Crypto,
28 Health,
30 Climate,
32 Security,
34}
35
36#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
38#[serde(rename_all = "camelCase")]
39pub enum OrderBy {
40 PublishDate,
42 CreatedAt,
44 RevisedDate,
46}
47
48#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
50pub enum SortOrder {
51 #[serde(rename = "ASC")]
53 Asc,
54 #[serde(rename = "DESC")]
56 Desc,
57}
58
59#[derive(Clone, Debug, Default, Serialize)]
63#[serde(rename_all = "camelCase")]
64pub struct GetArticlesParams {
65 #[serde(skip_serializing_if = "Option::is_none")]
68 pub query: Option<String>,
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub source: Option<String>,
72 #[serde(skip_serializing_if = "Option::is_none")]
74 pub sources: Option<Vec<String>>,
75 #[serde(skip_serializing_if = "Option::is_none")]
77 pub exclude_sources: Option<Vec<String>>,
78 #[serde(skip_serializing_if = "Option::is_none")]
80 pub opt_in_sources: Option<Vec<String>>,
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub from: Option<String>,
84 #[serde(skip_serializing_if = "Option::is_none")]
86 pub to: Option<String>,
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub language: Option<String>,
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub tickers: Option<Vec<String>>,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub include_entities: Option<bool>,
96 #[serde(skip_serializing_if = "Option::is_none")]
98 pub exclude_empty_content: Option<bool>,
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub include_content: Option<bool>,
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub order_by: Option<OrderBy>,
105 #[serde(skip_serializing_if = "Option::is_none")]
107 pub order: Option<SortOrder>,
108 #[serde(skip_serializing_if = "Option::is_none")]
110 pub page_size: Option<u32>,
111 #[serde(skip_serializing_if = "Option::is_none")]
113 pub page: Option<u32>,
114 #[serde(skip_serializing_if = "Option::is_none")]
116 pub countries: Option<Vec<String>>,
117 #[serde(skip_serializing_if = "Option::is_none")]
119 pub categories: Option<Vec<Category>>,
120}
121
122#[derive(Clone, Debug, Default)]
124pub struct GetArticleByLinkParams {
125 pub link: String,
127 pub include_content: bool,
129 pub include_entities: bool,
131}
132
133#[derive(Clone, Debug, Default, Serialize)]
135#[serde(rename_all = "camelCase")]
136pub struct GetArticlesWebSocketParams {
137 #[serde(skip_serializing_if = "Option::is_none")]
139 pub query: Option<String>,
140 #[serde(skip_serializing_if = "Option::is_none")]
142 pub sources: Option<Vec<String>>,
143 #[serde(skip_serializing_if = "Option::is_none")]
145 pub exclude_sources: Option<Vec<String>>,
146 #[serde(skip_serializing_if = "Option::is_none")]
148 pub opt_in_sources: Option<Vec<String>>,
149 #[serde(skip_serializing_if = "Option::is_none")]
151 pub language: Option<String>,
152 #[serde(skip_serializing_if = "Option::is_none")]
154 pub extended: Option<bool>,
155 #[serde(skip_serializing_if = "Option::is_none")]
157 pub tickers: Option<Vec<String>>,
158 #[serde(skip_serializing_if = "Option::is_none")]
160 pub include_entities: Option<bool>,
161 #[serde(skip_serializing_if = "Option::is_none")]
163 pub exclude_empty_content: Option<bool>,
164 #[serde(skip_serializing_if = "Option::is_none")]
166 pub include_content: Option<bool>,
167 #[serde(skip_serializing_if = "Option::is_none")]
169 pub countries: Option<Vec<String>>,
170 #[serde(skip_serializing_if = "Option::is_none")]
172 pub categories: Option<Vec<Category>>,
173 #[serde(skip_serializing_if = "Option::is_none")]
175 pub include_updates: Option<bool>,
176}
177
178#[derive(Clone, Debug, Default, Serialize)]
180#[serde(rename_all = "camelCase")]
181pub struct GetRawArticlesWebSocketParams {
182 #[serde(skip_serializing_if = "Option::is_none")]
184 pub query: Option<String>,
185 #[serde(skip_serializing_if = "Option::is_none")]
187 pub sources: Option<Vec<String>>,
188 #[serde(skip_serializing_if = "Option::is_none")]
190 pub exclude_sources: Option<Vec<String>>,
191 #[serde(skip_serializing_if = "Option::is_none")]
193 pub opt_in_sources: Option<Vec<String>>,
194 #[serde(skip_serializing_if = "Option::is_none")]
196 pub language: Option<String>,
197 #[serde(skip_serializing_if = "Option::is_none")]
199 pub include_updates: Option<bool>,
200}