summaryrefslogtreecommitdiff
path: root/common/rust/src/discord_models/user.rs
blob: 36914cea9524452325f0a56b850157cf4a837678 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
use enumflags2::{bitflags, BitFlags};
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};

use super::guild::Integration;

#[bitflags]
#[repr(u64)]
#[derive(Debug, Clone, Copy)]
pub enum UserFlags {
    // None = 0 << 0,
    DiscordEmployee = 1 << 0,
    PartneredServerOwner = 1 << 1,
    HypesquadEvents = 1 << 2,
    BugHunterLevel1 = 1 << 3,
    HouseBravery = 1 << 6,
    HouseBrilliance = 1 << 7,
    HouseBalance = 1 << 8,
    EarlySupporter = 1 << 9,
    TeamUser = 1 << 10,
    BugHunterLevel2 = 1 << 14,
    VerifiedBot = 1 << 16,
    EarlyVerifiedBotDeveloper = 1 << 17,
    DiscordCertifiedModerator = 1 << 18,
}

#[derive(Debug, Clone, Deserialize_repr, Serialize_repr)]
#[repr(u8)]
pub enum PremiumTypes {
    None = 0,
    NitroClassic = 1,
    Nitro = 2,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
/// Represents a User within Discord
pub struct User {
    pub id: String,
    pub username: String,
    pub discriminator: String,
    pub avatar: Option<String>,
    pub bot: Option<bool>,
    pub system: Option<bool>,
    pub mfa_enabled: Option<bool>,
    pub locale: Option<String>,
    pub verified: Option<bool>,
    pub email: Option<String>,
    pub flags: Option<BitFlags<UserFlags>>,
    pub premium_type: Option<PremiumTypes>,
    pub public_flags: Option<BitFlags<UserFlags>>,
}

#[derive(Debug, Clone, Deserialize_repr, Serialize_repr)]
#[repr(u8)]
pub enum VisibilityTypes {
    None = 0,
    Everyone = 1,
}

#[derive(Debug, Clone, Deserialize, Serialize)]
/// The connection object that the user has attached.
pub struct Connection {
    pub id: String,
    pub name: String,
    #[serde(rename = "type")]
    pub type_: String,
    pub revoked: Option<bool>,
    pub integrations: Option<Vec<Integration>>,
    pub verified: bool,
    pub friend_sync: bool,
    pub show_activity: bool,
    pub visibility: VisibilityTypes,
}