Skip to main content

twapi_v2/responses/
users.rs

1use crate::responses::{user_entities::UserEntities, withheld::Withheld};
2use chrono::prelude::*;
3use serde::{Deserialize, Serialize};
4
5#[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq)]
6pub struct Users {
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub connection_status: Option<Vec<String>>,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub created_at: Option<DateTime<Utc>>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub description: Option<String>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub entities: Option<UserEntities>,
15    pub id: String,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub is_identity_verified: Option<bool>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub location: Option<String>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub most_recent_tweet_id: Option<String>,
22    pub name: String,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub pinned_tweet_id: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub profile_banner_url: Option<String>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub profile_image_url: Option<String>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub protected: Option<bool>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub public_metrics: Option<PublicMetrics>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub receives_your_dm: Option<bool>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub subscription_type: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub url: Option<String>,
39    pub username: String,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub verified: Option<bool>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub verified_type: Option<String>,
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub withheld: Option<Withheld>,
46    #[serde(flatten)]
47    pub extra: std::collections::HashMap<String, serde_json::Value>,
48}
49
50impl Users {
51    pub fn is_empty_extra(&self) -> bool {
52        let res = self.extra.is_empty()
53            && self
54                .entities
55                .as_ref()
56                .map(|it| it.is_empty_extra())
57                .unwrap_or(true)
58            && self
59                .public_metrics
60                .as_ref()
61                .map(|it| it.is_empty_extra())
62                .unwrap_or(true)
63            && self
64                .withheld
65                .as_ref()
66                .map(|it| it.is_empty_extra())
67                .unwrap_or(true);
68        if !res {
69            println!("Users {:?}", self.extra);
70        }
71        res
72    }
73}
74
75#[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq)]
76pub struct PublicMetrics {
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub followers_count: Option<i64>,
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub following_count: Option<i64>,
81    #[serde(skip_serializing_if = "Option::is_none")]
82    pub tweet_count: Option<i64>,
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub listed_count: Option<i64>,
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub like_count: Option<i64>,
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub media_count: Option<i64>,
89    #[serde(flatten)]
90    pub extra: std::collections::HashMap<String, serde_json::Value>,
91}
92
93impl PublicMetrics {
94    pub fn is_empty_extra(&self) -> bool {
95        let res = self.extra.is_empty();
96        if !res {
97            println!("PublicMetrics {:?}", self.extra);
98        }
99        res
100    }
101}