tiktokapi_v2/responses/
user.rs1use 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}