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)]
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