1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
5pub struct SearchTweet {
6 pub id: String,
7 #[serde(skip_serializing_if = "Option::is_none")]
8 pub text: Option<String>,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub author_id: Option<String>,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub created_at: Option<String>,
13}
14
15impl SearchTweet {
16 pub fn new(id: impl Into<String>) -> Self {
17 Self {
18 id: id.into(),
19 text: None,
20 author_id: None,
21 created_at: None,
22 }
23 }
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
28pub struct SearchUser {
29 pub id: String,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub name: Option<String>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub username: Option<String>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub description: Option<String>,
36}
37
38impl SearchUser {
39 pub fn new(id: impl Into<String>) -> Self {
40 Self {
41 id: id.into(),
42 name: None,
43 username: None,
44 description: None,
45 }
46 }
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct SearchPaginationMeta {
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub next_token: Option<String>,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub prev_token: Option<String>,
56 pub result_count: usize,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct SearchRecentResult {
62 pub tweets: Vec<SearchTweet>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub meta: Option<SearchResultMeta>,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct SearchUsersResult {
70 pub users: Vec<SearchUser>,
71 #[serde(skip_serializing_if = "Option::is_none")]
72 pub meta: Option<SearchResultMeta>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct SearchResultMeta {
78 pub pagination: SearchPaginationMeta,
79}