diff options
| author | n1c00o <git.n1c00o@gmail.com> | 2021-10-02 22:40:23 +0200 |
|---|---|---|
| committer | n1c00o <git.n1c00o@gmail.com> | 2021-10-02 22:40:23 +0200 |
| commit | 69cc20b406a77bebf7ccbd61336e5d149848af08 (patch) | |
| tree | e8dfaf3b76349e3558d2e2e36eddfb757712cd3f /common/rust/src | |
| parent | 1a40f1771eadc2604154be24932d80a48ef8feed (diff) | |
Implement User-related structures
Diffstat (limited to 'common/rust/src')
| -rw-r--r-- | common/rust/src/discord_models/guild.rs | 47 | ||||
| -rw-r--r-- | common/rust/src/discord_models/mod.rs | 2 | ||||
| -rw-r--r-- | common/rust/src/discord_models/user.rs | 73 | ||||
| -rw-r--r-- | common/rust/src/lib.rs | 1 |
4 files changed, 123 insertions, 0 deletions
diff --git a/common/rust/src/discord_models/guild.rs b/common/rust/src/discord_models/guild.rs new file mode 100644 index 0000000..92a11e7 --- /dev/null +++ b/common/rust/src/discord_models/guild.rs @@ -0,0 +1,47 @@ +use serde::{Deserialize, Serialize}; +use serde_repr::{Deserialize_repr, Serialize_repr}; + +use super::user::User; + +#[derive(Debug, Clone, Deserialize_repr, Serialize_repr)] +#[repr(u8)] +pub enum IntegrationExpireBehavior { + RemoveRole = 0, + Kick = 1, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct IntegrationAccount { + pub id: String, + pub name: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct IntegrationApplication { + pub id: String, + pub name: String, + pub icon: Option<String>, + pub description: String, + pub summary: Option<String>, + pub bot: Option<User>, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct Integration { + pub id: String, + pub name: String, + #[serde(rename = "type")] + pub type_: String, + pub enabled: bool, + pub syncing: Option<bool>, + pub role_id: Option<String>, + pub enable_emoticons: Option<bool>, + pub expire_behavior: Option<IntegrationExpireBehavior>, + pub expire_grace_period: Option<i64>, + pub user: Option<User>, + pub account: IntegrationAccount, + pub synced_at: Option<String>, + pub subscriber_count: Option<i64>, + pub revoked: Option<bool>, + pub application: Option<IntegrationApplication>, +} diff --git a/common/rust/src/discord_models/mod.rs b/common/rust/src/discord_models/mod.rs new file mode 100644 index 0000000..56d877f --- /dev/null +++ b/common/rust/src/discord_models/mod.rs @@ -0,0 +1,2 @@ +pub mod guild; +pub mod user; diff --git a/common/rust/src/discord_models/user.rs b/common/rust/src/discord_models/user.rs new file mode 100644 index 0000000..36914ce --- /dev/null +++ b/common/rust/src/discord_models/user.rs @@ -0,0 +1,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, +} diff --git a/common/rust/src/lib.rs b/common/rust/src/lib.rs index 90f4b96..a021e97 100644 --- a/common/rust/src/lib.rs +++ b/common/rust/src/lib.rs @@ -1,6 +1,7 @@ /// This crate contains shared code in all the rust projects /// It contains utilities such as monitoring, logging and more. pub mod config; +pub mod discord_models; pub mod error; pub mod monitoring; pub mod nats; |
