twitter_v2/data/
user.rs

1use super::entity::{FullTextEntities, UrlEntity};
2use super::withheld::Withheld;
3use crate::id::NumericId;
4use serde::{Deserialize, Serialize};
5use time::OffsetDateTime;
6use url::Url;
7
8#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
9pub struct UserUrlEntites {
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub urls: Option<Vec<UrlEntity>>,
12}
13
14#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
15#[cfg_attr(feature = "arbitrary_precision", derive(Eq))]
16pub struct UserEntities {
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub url: Option<UserUrlEntites>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub description: Option<FullTextEntities>,
21}
22
23#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
24pub struct UserPublicMetrics {
25    pub followers_count: usize,
26    pub following_count: usize,
27    pub tweet_count: usize,
28    pub listed_count: usize,
29}
30
31#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
32#[cfg_attr(feature = "arbitrary_precision", derive(Eq))]
33pub struct User {
34    pub id: NumericId,
35    pub name: String,
36    pub username: String,
37    #[serde(
38        default,
39        with = "time::serde::rfc3339::option",
40        skip_serializing_if = "Option::is_none"
41    )]
42    pub created_at: Option<OffsetDateTime>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub description: Option<String>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub entities: Option<UserEntities>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub location: Option<String>,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub pinned_tweet_id: Option<NumericId>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub profile_image_url: Option<Url>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub protected: Option<bool>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub public_metrics: Option<UserPublicMetrics>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub url: Option<String>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub verified: Option<bool>,
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub withheld: Option<Withheld>,
63}