1extern crate serde_json;
2use serde::{Deserialize, Serialize};
3
4#[derive(Serialize, Deserialize, Debug)]
5pub struct FollowingResp {
6 #[serde(rename = "data")]
7 pub data: Data,
8}
9
10#[derive(Serialize, Deserialize, Debug)]
11pub struct Data {
12 #[serde(rename = "user")]
13 pub user: User,
14}
15
16#[derive(Serialize, Deserialize, Debug)]
17pub struct User {
18 #[serde(rename = "result")]
19 pub result: UserResult,
20}
21
22#[derive(Serialize, Deserialize, Debug)]
23pub struct UserResult {
24 #[serde(rename = "__typename")]
25 pub typename: UserDisplayTypeEnum,
26
27 #[serde(rename = "timeline")]
28 pub timeline: ResultTimeline,
29}
30
31#[derive(Serialize, Deserialize, Debug)]
32pub struct ResultTimeline {
33 #[serde(rename = "timeline")]
34 pub timeline: TimelineTimeline,
35}
36
37#[derive(Serialize, Deserialize, Debug)]
38pub struct TimelineTimeline {
39 #[serde(rename = "instructions")]
40 pub instructions: Vec<Instruction>,
41}
42
43#[derive(Serialize, Deserialize, Debug)]
44pub struct Instruction {
45 #[serde(rename = "type")]
46 pub instruction_type: String,
47
48 #[serde(rename = "direction")]
49 pub direction: Option<String>,
50
51 #[serde(rename = "entries")]
52 pub entries: Option<Vec<Entry>>,
53}
54
55#[derive(Serialize, Deserialize, Debug)]
56pub struct Entry {
57 #[serde(rename = "entryId")]
58 pub entry_id: String,
59
60 #[serde(rename = "sortIndex")]
61 pub sort_index: String,
62
63 #[serde(rename = "content")]
64 pub content: Content,
65}
66
67#[derive(Serialize, Deserialize, Debug)]
68pub struct Content {
69 #[serde(rename = "entryType")]
70 pub entry_type: EntryTypeEnum,
71
72 #[serde(rename = "__typename")]
73 pub typename: EntryTypeEnum,
74
75 #[serde(rename = "itemContent")]
76 pub item_content: Option<ItemContent>,
77
78 #[serde(rename = "clientEventInfo")]
79 pub client_event_info: Option<ClientEventInfo>,
80
81 #[serde(rename = "value")]
82 pub value: Option<String>,
83
84 #[serde(rename = "cursorType")]
85 pub cursor_type: Option<String>,
86}
87
88#[derive(Serialize, Deserialize, Debug)]
89pub struct ClientEventInfo {
90 #[serde(rename = "component")]
91 pub component: Component,
92
93 #[serde(rename = "element")]
94 pub element: Element,
95}
96
97#[derive(Serialize, Deserialize, Debug)]
98pub struct ItemContent {
99 #[serde(rename = "itemType")]
100 pub item_type: ItemTypeEnum,
101
102 #[serde(rename = "__typename")]
103 pub typename: ItemTypeEnum,
104
105 #[serde(rename = "user_results")]
106 pub user_results: UserResults,
107
108 #[serde(rename = "userDisplayType")]
109 pub user_display_type: UserDisplayTypeEnum,
110}
111
112#[derive(Serialize, Deserialize, Debug)]
113pub struct UserResults {
114 #[serde(rename = "result")]
115 pub result: UserResultsResult,
116}
117
118#[derive(Serialize, Deserialize, Debug)]
119pub struct UserResultsResult {
120 #[serde(rename = "__typename")]
121 pub typename: UserDisplayTypeEnum,
122
123 #[serde(rename = "id")]
124 pub id: String,
125
126 #[serde(rename = "rest_id")]
127 pub rest_id: String,
128
129 #[serde(rename = "affiliates_highlighted_label")]
130 pub affiliates_highlighted_label: AffiliatesHighlightedLabel,
131
132 #[serde(rename = "has_graduated_access")]
133 pub has_graduated_access: bool,
134
135 #[serde(rename = "is_blue_verified")]
136 pub is_blue_verified: bool,
137
138 #[serde(rename = "profile_image_shape")]
139 pub profile_image_shape: ProfileImageShape,
140
141 #[serde(rename = "legacy")]
142 pub legacy: Legacy,
143
144 #[serde(rename = "professional")]
145 pub professional: Option<Professional>,
146}
147
148#[derive(Serialize, Deserialize, Debug)]
149pub struct AffiliatesHighlightedLabel {
150 #[serde(rename = "label")]
151 pub label: Option<Label>,
152}
153
154#[derive(Serialize, Deserialize, Debug)]
155pub struct Label {
156 #[serde(rename = "url")]
157 pub url: LabelUrl,
158
159 #[serde(rename = "badge")]
160 pub badge: Badge,
161
162 #[serde(rename = "description")]
163 pub description: String,
164
165 #[serde(rename = "userLabelType")]
166 pub user_label_type: String,
167
168 #[serde(rename = "userLabelDisplayType")]
169 pub user_label_display_type: String,
170}
171
172#[derive(Serialize, Deserialize, Debug)]
173pub struct Badge {
174 #[serde(rename = "url")]
175 pub url: String,
176}
177
178#[derive(Serialize, Deserialize, Debug)]
179pub struct LabelUrl {
180 #[serde(rename = "url")]
181 pub url: String,
182
183 #[serde(rename = "urlType")]
184 pub url_type: String,
185}
186
187#[derive(Serialize, Deserialize, Debug)]
188pub struct Legacy {
189 #[serde(rename = "can_dm")]
190 pub can_dm: bool,
191
192 #[serde(rename = "can_media_tag")]
193 pub can_media_tag: bool,
194
195 #[serde(rename = "created_at")]
196 pub created_at: String,
197
198 #[serde(rename = "default_profile")]
199 pub default_profile: bool,
200
201 #[serde(rename = "default_profile_image")]
202 pub default_profile_image: bool,
203
204 #[serde(rename = "description")]
205 pub description: String,
206
207 #[serde(rename = "entities")]
208 pub entities: Entities,
209
210 #[serde(rename = "fast_followers_count")]
211 pub fast_followers_count: i64,
212
213 #[serde(rename = "favourites_count")]
214 pub favourites_count: i64,
215
216 #[serde(rename = "followers_count")]
217 pub followers_count: i64,
218
219 #[serde(rename = "friends_count")]
220 pub friends_count: i64,
221
222 #[serde(rename = "has_custom_timelines")]
223 pub has_custom_timelines: bool,
224
225 #[serde(rename = "is_translator")]
226 pub is_translator: bool,
227
228 #[serde(rename = "listed_count")]
229 pub listed_count: i64,
230
231 #[serde(rename = "location")]
232 pub location: String,
233
234 #[serde(rename = "media_count")]
235 pub media_count: i64,
236
237 #[serde(rename = "name")]
238 pub name: String,
239
240 #[serde(rename = "normal_followers_count")]
241 pub normal_followers_count: i64,
242
243 #[serde(rename = "pinned_tweet_ids_str")]
244 pub pinned_tweet_ids_str: Vec<String>,
245
246 #[serde(rename = "possibly_sensitive")]
247 pub possibly_sensitive: bool,
248
249 #[serde(rename = "profile_banner_url")]
250 pub profile_banner_url: Option<String>,
251
252 #[serde(rename = "profile_image_url_https")]
253 pub profile_image_url_https: String,
254
255 #[serde(rename = "profile_interstitial_type")]
256 pub profile_interstitial_type: String,
257
258 #[serde(rename = "screen_name")]
259 pub screen_name: String,
260
261 #[serde(rename = "statuses_count")]
262 pub statuses_count: i64,
263
264 #[serde(rename = "translator_type")]
265 pub translator_type: TranslatorType,
266
267 #[serde(rename = "verified")]
268 pub verified: bool,
269
270 #[serde(rename = "want_retweets")]
271 pub want_retweets: bool,
272
273 #[serde(rename = "withheld_in_countries")]
274 pub withheld_in_countries: Vec<Option<serde_json::Value>>,
275
276 #[serde(rename = "url")]
277 pub url: Option<String>,
278
279 #[serde(rename = "following")]
280 pub following: Option<bool>,
281
282 #[serde(rename = "verified_type")]
283 pub verified_type: Option<Type>,
284}
285
286#[derive(Serialize, Deserialize, Debug)]
287pub struct Entities {
288 #[serde(rename = "description")]
289 pub description: Description,
290
291 #[serde(rename = "url")]
292 pub url: Option<Description>,
293}
294
295#[derive(Serialize, Deserialize, Debug)]
296pub struct Description {
297 #[serde(rename = "urls")]
298 pub urls: Vec<UrlElement>,
299}
300
301#[derive(Serialize, Deserialize, Debug)]
302pub struct UrlElement {
303 #[serde(rename = "display_url")]
304 pub display_url: String,
305
306 #[serde(rename = "expanded_url")]
307 pub expanded_url: String,
308
309 #[serde(rename = "url")]
310 pub url: String,
311
312 #[serde(rename = "indices")]
313 pub indices: Vec<i64>,
314}
315
316#[derive(Serialize, Deserialize, Debug)]
317pub struct Professional {
318 #[serde(rename = "rest_id")]
319 pub rest_id: String,
320
321 #[serde(rename = "professional_type")]
322 pub professional_type: Type,
323
324 #[serde(rename = "category")]
325 pub category: Vec<Category>,
326}
327
328#[derive(Serialize, Deserialize, Debug)]
329pub struct Category {
330 #[serde(rename = "id")]
331 pub id: i64,
332
333 #[serde(rename = "name")]
334 pub name: String,
335
336 #[serde(rename = "icon_name")]
337 pub icon_name: IconName,
338}
339
340#[derive(Serialize, Deserialize, Debug)]
341pub enum Component {
342 #[serde(rename = "FollowingSgs")]
343 FollowingSgs,
344}
345
346#[derive(Serialize, Deserialize, Debug)]
347pub enum Element {
348 #[serde(rename = "user")]
349 User,
350}
351
352#[derive(Serialize, Deserialize, Debug)]
353pub enum EntryTypeEnum {
354 #[serde(rename = "TimelineTimelineCursor")]
355 TimelineTimelineCursor,
356
357 #[serde(rename = "TimelineTimelineItem")]
358 TimelineTimelineItem,
359}
360
361#[derive(Serialize, Deserialize, Debug)]
362pub enum ItemTypeEnum {
363 #[serde(rename = "TimelineUser")]
364 TimelineUser,
365}
366
367#[derive(Serialize, Deserialize, Debug)]
368pub enum UserDisplayTypeEnum {
369 #[serde(rename = "User")]
370 User,
371}
372
373#[derive(Serialize, Deserialize, Debug)]
374pub enum TranslatorType {
375 #[serde(rename = "none")]
376 None,
377
378 #[serde(rename = "regular")]
379 Regular,
380}
381
382#[derive(Serialize, Deserialize, Debug)]
383pub enum Type {
384 #[serde(rename = "Business")]
385 Business,
386
387 #[serde(rename = "Creator")]
388 Creator,
389}
390
391#[derive(Serialize, Deserialize, Debug)]
392pub enum IconName {
393 #[serde(rename = "IconBriefcaseStroke")]
394 IconBriefcaseStroke,
395}
396
397#[derive(Serialize, Deserialize, Debug)]
398pub enum ProfileImageShape {
399 #[serde(rename = "Circle")]
400 Circle,
401
402 #[serde(rename = "Square")]
403 Square,
404
405 #[serde(rename = "Hexagon")]
406 Hexagon,
407}