1use crate::model::file::File;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Serialize, Deserialize, Clone)]
5pub struct User {
6 #[serde(rename = "_id")]
7 pub id: String,
8 pub online: bool,
9 pub discriminator: String,
10 pub relationship: RelationshipStatus,
11 #[serde(skip_serializing_if = "Vec::is_empty", default)]
12 pub relations: Vec<Relationship>,
13 pub username: String,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub avatar: Option<File>,
16 #[serde(skip_serializing_if = "crate::model::if_zero_u32", default)]
17 pub badges: u32,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub bot: Option<BotInformation>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub display_name: Option<String>,
22 #[serde(skip_serializing_if = "crate::model::if_zero_u32", default)]
23 pub flags: u32,
24 #[serde(skip_serializing_if = "crate::model::if_false", default)]
25 pub privileged: bool,
26 pub status: Option<UserStatus>,
27}
28#[derive(Debug, Serialize, Deserialize, Clone)]
29pub struct BotInformation {
30 #[serde(rename = "owner")]
31 pub owner_id: String,
32}
33#[derive(Debug, Serialize, Deserialize, Clone)]
34pub struct UserStatus {
35 pub text: Option<String>,
36 pub presence: Option<Presence>,
37}
38
39#[derive(Debug, Serialize, Deserialize, Clone)]
40pub enum Presence {
41 Online,
42 Idle,
43 Focus,
44 Busy,
45 Invisible,
46}
47
48#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Clone)]
50pub enum RelationshipStatus {
51 #[default]
53 None,
54 User,
56 Friend,
58 Outgoing,
60 Incoming,
62 Blocked,
64 BlockedOther,
66}
67
68#[derive(Debug, Serialize, Deserialize, Clone)]
69pub struct Relationship {
71 pub user_id: String,
73 pub status: RelationshipStatus,
75}
76#[derive(Debug, Serialize)]
77pub struct DataUserProfile {
79 pub content: Option<String>,
81 pub background: Option<String>,
83}
84#[derive(Debug, Serialize)]
85pub enum FieldsUser {
87 Avatar,
88 StatusText,
89 StatusPresence,
90 ProfileContent,
91 ProfileBackground,
92 DisplayName,
93
94 Internal,
96}
97#[derive(Default, Serialize)]
98pub struct DataEditUser {
99 pub display_name: Option<String>,
101 pub avatar: Option<String>,
103 pub status: Option<UserStatus>,
105 pub profile: Option<DataUserProfile>,
109
110 pub badges: Option<i32>,
112 pub flags: Option<i32>,
114
115 pub remove: Option<Vec<FieldsUser>>,
117}
118impl DataEditUser {
119 pub fn new() -> Self {
120 Self::default()
121 }
122}
123impl User {
124 pub fn to_string(&self) -> String {
126 format!("<@{}>", self.id)
127 }
128}