Skip to main content

xcom_rs/search/
models.rs

1use serde::{Deserialize, Serialize};
2
3/// A tweet returned by search results
4#[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/// A user returned by user search results
27#[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/// Pagination metadata for search results
50#[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/// Result of a recent tweet search
60#[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/// Result of a user search
68#[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/// Metadata for search results
76#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct SearchResultMeta {
78    pub pagination: SearchPaginationMeta,
79}