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