twapi_v2/responses/
users.rs1use 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}