]> git.puffer.fish Git - matthieu/nova.git/commitdiff
Implement User-related structures
authorn1c00o <git.n1c00o@gmail.com>
Sat, 2 Oct 2021 20:40:23 +0000 (22:40 +0200)
committern1c00o <git.n1c00o@gmail.com>
Sat, 2 Oct 2021 20:40:23 +0000 (22:40 +0200)
common/rust/src/discord_models/guild.rs [new file with mode: 0644]
common/rust/src/discord_models/mod.rs [new file with mode: 0644]
common/rust/src/discord_models/user.rs [new file with mode: 0644]
common/rust/src/lib.rs

diff --git a/common/rust/src/discord_models/guild.rs b/common/rust/src/discord_models/guild.rs
new file mode 100644 (file)
index 0000000..92a11e7
--- /dev/null
@@ -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 (file)
index 0000000..56d877f
--- /dev/null
@@ -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 (file)
index 0000000..36914ce
--- /dev/null
@@ -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,
+}
index 90f4b96d5f70ce0979a42422de996614538c331e..a021e97f6c2cf20b3b7ea22db0b4d69263e3cba0 100644 (file)
@@ -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;