1use serde::{Deserialize, Serialize};
2
3use super::common::RecentSearch;
4use super::ids::UserId;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct User {
9 pub id: UserId,
11 pub username: String,
13 #[serde(default, skip_serializing_if = "Option::is_none")]
15 pub name: Option<String>,
16 #[serde(default, skip_serializing_if = "Option::is_none")]
18 pub threads_profile_picture_url: Option<String>,
19 #[serde(default, skip_serializing_if = "Option::is_none")]
21 pub threads_biography: Option<String>,
22 #[serde(default, skip_serializing_if = "Option::is_none")]
24 pub website: Option<String>,
25 #[serde(default)]
27 pub followers_count: i64,
28 #[serde(default)]
30 pub media_count: i64,
31 #[serde(default)]
33 pub is_verified: bool,
34 #[serde(default)]
36 pub is_eligible_for_geo_gating: bool,
37 #[serde(default, skip_serializing_if = "Option::is_none")]
39 pub recently_searched_keywords: Option<Vec<RecentSearch>>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct PublicUser {
45 pub username: String,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
49 pub name: Option<String>,
50 #[serde(default, skip_serializing_if = "Option::is_none")]
52 pub profile_picture_url: Option<String>,
53 #[serde(default, skip_serializing_if = "Option::is_none")]
55 pub biography: Option<String>,
56 #[serde(default)]
58 pub is_verified: bool,
59 #[serde(default)]
61 pub follower_count: i64,
62 #[serde(default)]
64 pub likes_count: i64,
65 #[serde(default)]
67 pub quotes_count: i64,
68 #[serde(default)]
70 pub replies_count: i64,
71 #[serde(default)]
73 pub reposts_count: i64,
74 #[serde(default)]
76 pub views_count: i64,
77}