twapi_v2/fields/
tweet_fields.rs

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}