1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
use super::entity::FullTextEntities;
use super::withheld::Withheld;
use super::GeoCoordinates;
use crate::id::{NumericId, StringId};
use serde::{Deserialize, Serialize};
use time::OffsetDateTime;
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
pub struct TweetPublicMetrics {
pub retweet_count: usize,
pub reply_count: usize,
pub like_count: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub quote_count: Option<usize>,
}
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
pub struct TweetNonPublicMetrics {
pub impression_count: Option<usize>,
}
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
pub struct TweetPromotedMetrics {
#[serde(skip_serializing_if = "Option::is_none")]
pub impression_count: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub retweet_count: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_count: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub like_count: Option<usize>,
}
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
pub struct TweetOrganicMetrics {
pub impression_count: usize,
pub retweet_count: usize,
pub reply_count: usize,
pub like_count: usize,
}
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
pub struct Attachments {
#[serde(skip_serializing_if = "Option::is_none")]
pub media_keys: Option<Vec<StringId>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub poll_ids: Option<Vec<NumericId>>,
}
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
pub struct ContextAnnotationDescription {
pub id: NumericId,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
pub struct ContextAnnotation {
pub domain: ContextAnnotationDescription,
pub entity: ContextAnnotationDescription,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "arbitrary_precision", derive(Eq))]
pub struct TweetGeo {
pub place_id: Option<StringId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub coordinates: Option<GeoCoordinates>,
}
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum ReferencedTweetType {
Quoted,
}
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum ReferencedTweetKind {
Quoted,
RepliedTo,
Retweeted,
}
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
pub struct ReferencedTweet {
#[serde(rename = "type")]
pub kind: ReferencedTweetKind,
pub id: NumericId,
}
#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum ReplySettings {
Everyone,
MentionedUsers,
Followers,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "arbitrary_precision", derive(Eq))]
pub struct Tweet {
pub id: NumericId,
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub attachments: Option<Attachments>,
#[serde(skip_serializing_if = "Option::is_none")]
pub author_id: Option<NumericId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub context_annotations: Option<Vec<ContextAnnotation>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub conversation_id: Option<NumericId>,
#[serde(
default,
with = "time::serde::rfc3339::option",
skip_serializing_if = "Option::is_none"
)]
pub created_at: Option<OffsetDateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entities: Option<FullTextEntities>,
#[serde(skip_serializing_if = "Option::is_none")]
pub geo: Option<TweetGeo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub in_reply_to_user_id: Option<NumericId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lang: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub non_public_metrics: Option<TweetNonPublicMetrics>,
#[serde(skip_serializing_if = "Option::is_none")]
pub organic_metrics: Option<TweetOrganicMetrics>,
#[serde(skip_serializing_if = "Option::is_none")]
pub possibly_sensitive: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub promoted_metrics: Option<TweetPromotedMetrics>,
#[serde(skip_serializing_if = "Option::is_none")]
pub public_metrics: Option<TweetPublicMetrics>,
#[serde(skip_serializing_if = "Option::is_none")]
pub referenced_tweets: Option<Vec<ReferencedTweet>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_settings: Option<ReplySettings>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub withheld: Option<Withheld>,
}