Skip to main content

twapi_v2/fields/
tweet_fields.rs

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