tiktokapi_v2/responses/
user.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashSet;
3
4#[derive(Serialize, Deserialize, Debug, Clone, Default)]
5pub struct User {
6    #[serde(skip_serializing_if = "Option::is_none")]
7    pub open_id: Option<String>,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub union_id: Option<String>,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub avatar_url: Option<String>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub avatar_url_100: Option<String>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub avatar_large_url: Option<String>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub display_name: Option<String>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub bio_description: Option<String>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub profile_deep_link: Option<String>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub is_verified: Option<bool>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub username: Option<String>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub follower_count: Option<i64>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub following_count: Option<i64>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub likes_count: Option<i64>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub video_count: Option<i64>,
34    #[serde(flatten)]
35    pub extra: std::collections::HashMap<String, serde_json::Value>,
36}
37
38impl User {
39    pub fn is_empty_extra(&self) -> bool {
40        let res = self.extra.is_empty();
41        if !res {
42            println!("User {:?}", self.extra);
43        }
44        res
45    }
46}
47
48#[derive(Debug, Clone, Eq, Hash, PartialEq)]
49pub enum UserField {
50    OpenId,
51    UnionId,
52    AvatarUrl,
53    AvatarUrl100,
54    AvatarLargeUrl,
55    DisplayName,
56    BioDescription,
57    ProfileDeepLink,
58    IsVerified,
59    Username,
60    FollowerCount,
61    FollowingCount,
62    LikesCount,
63    VideoCount,
64}
65
66impl UserField {
67    pub fn all() -> HashSet<Self> {
68        let mut set = HashSet::new();
69        set.insert(UserField::OpenId);
70        set.insert(UserField::UnionId);
71        set.insert(UserField::AvatarUrl);
72        set.insert(UserField::AvatarUrl100);
73        set.insert(UserField::AvatarLargeUrl);
74        set.insert(UserField::DisplayName);
75        set.insert(UserField::BioDescription);
76        set.insert(UserField::ProfileDeepLink);
77        set.insert(UserField::IsVerified);
78        set.insert(UserField::Username);
79        set.insert(UserField::FollowerCount);
80        set.insert(UserField::FollowingCount);
81        set.insert(UserField::LikesCount);
82        set.insert(UserField::VideoCount);
83        set
84    }
85}
86
87impl std::fmt::Display for UserField {
88    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
89        match self {
90            Self::OpenId => write!(f, "open_id"),
91            Self::UnionId => write!(f, "union_id"),
92            Self::AvatarUrl => write!(f, "avatar_url"),
93            Self::AvatarUrl100 => write!(f, "avatar_url_100"),
94            Self::AvatarLargeUrl => write!(f, "avatar_large_url"),
95            Self::DisplayName => write!(f, "display_name"),
96            Self::BioDescription => write!(f, "bio_description"),
97            Self::ProfileDeepLink => write!(f, "profile_deep_link"),
98            Self::IsVerified => write!(f, "is_verified"),
99            Self::Username => write!(f, "username"),
100            Self::FollowerCount => write!(f, "follower_count"),
101            Self::FollowingCount => write!(f, "following_count"),
102            Self::LikesCount => write!(f, "likes_count"),
103            Self::VideoCount => write!(f, "video_count"),
104        }
105    }
106}