1use serde::{Deserialize, Serialize};
2use std::collections::HashSet;
3
4#[derive(Serialize, Deserialize, Debug, Eq, Hash, PartialEq, Clone)]
5pub enum TweetFields {
6 #[serde(rename = "article")]
7 Article,
8 #[serde(rename = "attachments")]
9 Attachments,
10 #[serde(rename = "author_id")]
11 AuthorId,
12 #[serde(rename = "card_uri")]
13 CardUri,
14 #[serde(rename = "community_id")]
15 CommunityId,
16 #[serde(rename = "context_annotations")]
17 ContextAnnotations,
18 #[serde(rename = "conversation_id")]
19 ConversationId,
20 #[serde(rename = "created_at")]
21 CreatedAt,
22 #[serde(rename = "display_text_range")]
23 DisplayTextRange,
24 #[serde(rename = "edit_controls")]
25 EditControls,
26 #[serde(rename = "edit_history_tweet_ids")]
27 EditHistoryTweetIds,
28 #[serde(rename = "entities")]
29 Entities,
30 #[serde(rename = "geo")]
31 Geo,
32 #[serde(rename = "id")]
33 Id,
34 #[serde(rename = "in_reply_to_user_id")]
35 InReplyToUserId,
36 #[serde(rename = "lang")]
37 Lang,
38 #[serde(rename = "media_metadata")]
39 MediaMetadata,
40 #[serde(rename = "non_public_metrics")]
41 NonPublicMetrics,
42 #[serde(rename = "note_tweet")]
43 NoteTweet,
44 #[serde(rename = "organic_metrics")]
45 OrganicMetrics,
46 #[serde(rename = "possibly_sensitive")]
47 PossiblySensitive,
48 #[serde(rename = "promoted_metrics")]
49 PromotedMetrics,
50 #[serde(rename = "public_metrics")]
51 PublicMetrics,
52 #[serde(rename = "referenced_tweets")]
53 ReferencedTweets,
54 #[serde(rename = "reply_settings")]
55 ReplySettings,
56 #[serde(rename = "scopes")]
57 Scopes,
58 #[serde(rename = "source")]
59 Source,
60 #[serde(rename = "text")]
61 Text,
62 #[serde(rename = "withheld")]
63 Withheld,
64}
65
66impl TweetFields {
67 pub fn all() -> HashSet<Self> {
68 let mut result = HashSet::new();
69 result.insert(Self::Article);
70 result.insert(Self::Attachments);
71 result.insert(Self::AuthorId);
72 result.insert(Self::CardUri);
73 result.insert(Self::CommunityId);
74 result.insert(Self::ContextAnnotations);
75 result.insert(Self::ConversationId);
76 result.insert(Self::CreatedAt);
77 result.insert(Self::DisplayTextRange);
78 result.insert(Self::EditControls);
79 result.insert(Self::EditHistoryTweetIds);
80 result.insert(Self::Entities);
81 result.insert(Self::Geo);
82 result.insert(Self::Id);
83 result.insert(Self::InReplyToUserId);
84 result.insert(Self::Lang);
85 result.insert(Self::MediaMetadata);
86 result.insert(Self::NonPublicMetrics);
87 result.insert(Self::NoteTweet);
88 result.insert(Self::OrganicMetrics);
89 result.insert(Self::PossiblySensitive);
90 result.insert(Self::PromotedMetrics);
91 result.insert(Self::PublicMetrics);
92 result.insert(Self::ReferencedTweets);
93 result.insert(Self::ReplySettings);
94 result.insert(Self::Scopes);
95 result.insert(Self::Source);
96 result.insert(Self::Text);
97 result.insert(Self::Withheld);
98 result
99 }
100
101 pub fn organic() -> HashSet<Self> {
102 let mut result = HashSet::new();
103 result.insert(Self::Article);
104 result.insert(Self::Attachments);
105 result.insert(Self::AuthorId);
106 result.insert(Self::CardUri);
107 result.insert(Self::CommunityId);
108 result.insert(Self::ContextAnnotations);
109 result.insert(Self::ConversationId);
110 result.insert(Self::CreatedAt);
111 result.insert(Self::DisplayTextRange);
112 result.insert(Self::EditControls);
113 result.insert(Self::EditHistoryTweetIds);
114 result.insert(Self::Entities);
115 result.insert(Self::Geo);
116 result.insert(Self::Id);
117 result.insert(Self::InReplyToUserId);
118 result.insert(Self::Lang);
119 result.insert(Self::MediaMetadata);
120 result.insert(Self::NonPublicMetrics);
121 result.insert(Self::NoteTweet);
122 result.insert(Self::OrganicMetrics);
123 result.insert(Self::PossiblySensitive);
124 result.insert(Self::PromotedMetrics);
125 result.insert(Self::PublicMetrics);
126 result.insert(Self::ReferencedTweets);
127 result.insert(Self::ReplySettings);
128 result.insert(Self::Scopes);
129 result.insert(Self::Source);
130 result.insert(Self::Text);
131 result.insert(Self::Withheld);
132 result
133 }
134
135 pub fn open() -> HashSet<Self> {
136 let mut result = HashSet::new();
137 result.insert(Self::Article);
138 result.insert(Self::Attachments);
139 result.insert(Self::AuthorId);
140 result.insert(Self::CardUri);
141 result.insert(Self::CommunityId);
142 result.insert(Self::ContextAnnotations);
143 result.insert(Self::ConversationId);
144 result.insert(Self::CreatedAt);
145 result.insert(Self::DisplayTextRange);
146 result.insert(Self::EditControls);
147 result.insert(Self::EditHistoryTweetIds);
148 result.insert(Self::Entities);
149 result.insert(Self::Geo);
150 result.insert(Self::Id);
151 result.insert(Self::InReplyToUserId);
152 result.insert(Self::Lang);
153 result.insert(Self::MediaMetadata);
154 result.insert(Self::NoteTweet);
155 result.insert(Self::PossiblySensitive);
156 result.insert(Self::PublicMetrics);
157 result.insert(Self::ReferencedTweets);
158 result.insert(Self::ReplySettings);
159 result.insert(Self::Scopes);
160 result.insert(Self::Source);
161 result.insert(Self::Text);
162 result.insert(Self::Withheld);
163 result
164 }
165}
166
167impl std::fmt::Display for TweetFields {
168 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
169 match self {
170 Self::Article => write!(f, "article"),
171 Self::Attachments => write!(f, "attachments"),
172 Self::AuthorId => write!(f, "author_id"),
173 Self::CardUri => write!(f, "card_uri"),
174 Self::CommunityId => write!(f, "community_id"),
175 Self::ContextAnnotations => write!(f, "context_annotations"),
176 Self::ConversationId => write!(f, "conversation_id"),
177 Self::CreatedAt => write!(f, "created_at"),
178 Self::DisplayTextRange => write!(f, "display_text_range"),
179 Self::EditControls => write!(f, "edit_controls"),
180 Self::EditHistoryTweetIds => write!(f, "edit_history_tweet_ids"),
181 Self::Entities => write!(f, "entities"),
182 Self::Geo => write!(f, "geo"),
183 Self::Id => write!(f, "id"),
184 Self::InReplyToUserId => write!(f, "in_reply_to_user_id"),
185 Self::Lang => write!(f, "lang"),
186 Self::MediaMetadata => write!(f, "media_metadata"),
187 Self::NonPublicMetrics => write!(f, "non_public_metrics"),
188 Self::NoteTweet => write!(f, "note_tweet"),
189 Self::OrganicMetrics => write!(f, "organic_metrics"),
190 Self::PossiblySensitive => write!(f, "possibly_sensitive"),
191 Self::PromotedMetrics => write!(f, "promoted_metrics"),
192 Self::PublicMetrics => write!(f, "public_metrics"),
193 Self::ReferencedTweets => write!(f, "referenced_tweets"),
194 Self::ReplySettings => write!(f, "reply_settings"),
195 Self::Scopes => write!(f, "scopes"),
196 Self::Source => write!(f, "source"),
197 Self::Text => write!(f, "text"),
198 Self::Withheld => write!(f, "withheld"),
199 }
200 }
201}
202
203impl Default for TweetFields {
204 fn default() -> Self {
205 Self::Article
206 }
207}