From 103e1feeeb1c042659c70717a5234270bc112a11 Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Thu, 1 Jun 2023 18:20:55 +0200 Subject: [PATCH] We had two types directories this whole time??? --- types/config/mod.rs | 187 -------------- types/config/types/api_configuration.rs | 24 -- types/config/types/cdn_configuration.rs | 25 -- types/config/types/defaults_configuration.rs | 10 - types/config/types/email_configuration.rs | 27 -- types/config/types/endpoint_configuration.rs | 9 - .../types/external_tokens_configuration.rs | 7 - types/config/types/general_configuration.rs | 35 --- types/config/types/gif_configuration.rs | 26 -- types/config/types/guild_configuration.rs | 126 --------- types/config/types/kafka_configuration.rs | 10 - types/config/types/limit_configuration.rs | 17 -- types/config/types/login_configuration.rs | 8 - types/config/types/metrics_configuration.rs | 13 - types/config/types/mod.rs | 21 -- .../types/password_reset_configuration.rs | 7 - types/config/types/rabbit_mq_configuration.rs | 7 - types/config/types/region_configuration.rs | 29 --- types/config/types/register_configuration.rs | 41 --- types/config/types/security_configuration.rs | 42 --- types/config/types/sentry_configuration.rs | 28 -- types/config/types/subconfigs/client/mod.rs | 17 -- .../config/types/subconfigs/defaults/guild.rs | 23 -- types/config/types/subconfigs/defaults/mod.rs | 2 - .../config/types/subconfigs/defaults/user.rs | 19 -- .../config/types/subconfigs/email/mailgun.rs | 8 - .../config/types/subconfigs/email/mailjet.rs | 8 - types/config/types/subconfigs/email/mod.rs | 4 - .../config/types/subconfigs/email/sendgrid.rs | 7 - types/config/types/subconfigs/email/smtp.rs | 10 - .../config/types/subconfigs/guild/autojoin.rs | 22 -- .../types/subconfigs/guild/discovery.rs | 21 -- types/config/types/subconfigs/guild/mod.rs | 2 - types/config/types/subconfigs/kafka/mod.rs | 7 - .../config/types/subconfigs/limits/channel.rs | 19 -- .../config/types/subconfigs/limits/global.rs | 41 --- types/config/types/subconfigs/limits/guild.rs | 23 -- .../config/types/subconfigs/limits/message.rs | 26 -- types/config/types/subconfigs/limits/mod.rs | 7 - .../subconfigs/limits/ratelimits/auth.rs | 28 -- .../types/subconfigs/limits/ratelimits/mod.rs | 14 - .../subconfigs/limits/ratelimits/route.rs | 37 --- types/config/types/subconfigs/limits/rates.rs | 41 --- types/config/types/subconfigs/limits/user.rs | 19 -- types/config/types/subconfigs/mod.rs | 9 - types/config/types/subconfigs/region/mod.rs | 21 -- .../subconfigs/register/date_of_birth.rs | 16 -- .../config/types/subconfigs/register/email.rs | 21 -- types/config/types/subconfigs/register/mod.rs | 7 - .../types/subconfigs/register/password.rs | 23 -- .../types/subconfigs/security/captcha.rs | 27 -- types/config/types/subconfigs/security/mod.rs | 5 - .../types/subconfigs/security/twofactor.rs | 15 -- types/config/types/template_configuration.rs | 21 -- types/entities/application.rs | 140 ---------- types/entities/attachment.rs | 113 --------- types/entities/channel.rs | 116 --------- types/entities/config.rs | 34 --- types/entities/emoji.rs | 15 -- types/entities/guild.rs | 117 --------- types/entities/guild_member.rs | 19 -- types/entities/integration.rs | 36 --- types/entities/message.rs | 185 -------------- types/entities/mod.rs | 37 --- types/entities/role.rs | 28 -- types/entities/security_key.rs | 26 -- types/entities/sticker.rs | 27 -- types/entities/team.rs | 20 -- types/entities/template.rs | 24 -- types/entities/user.rs | 112 -------- types/entities/user_settings.rs | 133 ---------- types/entities/voice_state.rs | 30 --- types/entities/webhook.rs | 32 --- types/errors.rs | 54 ---- types/events/channel.rs | 41 --- types/events/guild.rs | 41 --- types/events/heartbeat.rs | 17 -- types/events/hello.rs | 17 -- types/events/identify.rs | 22 -- types/events/message.rs | 101 -------- types/events/mod.rs | 41 --- types/events/presence.rs | 24 -- types/events/ready.rs | 15 -- types/events/request_members.rs | 15 -- types/events/resume.rs | 11 - types/events/thread.rs | 82 ------ types/events/user.rs | 12 - types/events/voice_status.rs | 13 - types/interfaces/activity.rs | 57 ----- types/interfaces/connected_account.rs | 0 types/interfaces/guild_welcome_screen.rs | 17 -- types/interfaces/interaction.rs | 39 --- types/interfaces/mod.rs | 11 - types/interfaces/status.rs | 9 - types/lib.rs | 7 - types/schema/apierror.rs | 72 ------ types/schema/auth.rs | 240 ------------------ types/schema/channel.rs | 27 -- types/schema/guild.rs | 14 - types/schema/message.rs | 47 ---- types/schema/mod.rs | 103 -------- types/schema/user.rs | 16 -- types/utils/jwt.rs | 44 ---- types/utils/mod.rs | 8 - types/utils/regexes.rs | 12 - types/utils/rights.rs | 127 --------- types/utils/snowflake.rs | 160 ------------ 107 files changed, 4029 deletions(-) delete mode 100644 types/config/mod.rs delete mode 100644 types/config/types/api_configuration.rs delete mode 100644 types/config/types/cdn_configuration.rs delete mode 100644 types/config/types/defaults_configuration.rs delete mode 100644 types/config/types/email_configuration.rs delete mode 100644 types/config/types/endpoint_configuration.rs delete mode 100644 types/config/types/external_tokens_configuration.rs delete mode 100644 types/config/types/general_configuration.rs delete mode 100644 types/config/types/gif_configuration.rs delete mode 100644 types/config/types/guild_configuration.rs delete mode 100644 types/config/types/kafka_configuration.rs delete mode 100644 types/config/types/limit_configuration.rs delete mode 100644 types/config/types/login_configuration.rs delete mode 100644 types/config/types/metrics_configuration.rs delete mode 100644 types/config/types/mod.rs delete mode 100644 types/config/types/password_reset_configuration.rs delete mode 100644 types/config/types/rabbit_mq_configuration.rs delete mode 100644 types/config/types/region_configuration.rs delete mode 100644 types/config/types/register_configuration.rs delete mode 100644 types/config/types/security_configuration.rs delete mode 100644 types/config/types/sentry_configuration.rs delete mode 100644 types/config/types/subconfigs/client/mod.rs delete mode 100644 types/config/types/subconfigs/defaults/guild.rs delete mode 100644 types/config/types/subconfigs/defaults/mod.rs delete mode 100644 types/config/types/subconfigs/defaults/user.rs delete mode 100644 types/config/types/subconfigs/email/mailgun.rs delete mode 100644 types/config/types/subconfigs/email/mailjet.rs delete mode 100644 types/config/types/subconfigs/email/mod.rs delete mode 100644 types/config/types/subconfigs/email/sendgrid.rs delete mode 100644 types/config/types/subconfigs/email/smtp.rs delete mode 100644 types/config/types/subconfigs/guild/autojoin.rs delete mode 100644 types/config/types/subconfigs/guild/discovery.rs delete mode 100644 types/config/types/subconfigs/guild/mod.rs delete mode 100644 types/config/types/subconfigs/kafka/mod.rs delete mode 100644 types/config/types/subconfigs/limits/channel.rs delete mode 100644 types/config/types/subconfigs/limits/global.rs delete mode 100644 types/config/types/subconfigs/limits/guild.rs delete mode 100644 types/config/types/subconfigs/limits/message.rs delete mode 100644 types/config/types/subconfigs/limits/mod.rs delete mode 100644 types/config/types/subconfigs/limits/ratelimits/auth.rs delete mode 100644 types/config/types/subconfigs/limits/ratelimits/mod.rs delete mode 100644 types/config/types/subconfigs/limits/ratelimits/route.rs delete mode 100644 types/config/types/subconfigs/limits/rates.rs delete mode 100644 types/config/types/subconfigs/limits/user.rs delete mode 100644 types/config/types/subconfigs/mod.rs delete mode 100644 types/config/types/subconfigs/region/mod.rs delete mode 100644 types/config/types/subconfigs/register/date_of_birth.rs delete mode 100644 types/config/types/subconfigs/register/email.rs delete mode 100644 types/config/types/subconfigs/register/mod.rs delete mode 100644 types/config/types/subconfigs/register/password.rs delete mode 100644 types/config/types/subconfigs/security/captcha.rs delete mode 100644 types/config/types/subconfigs/security/mod.rs delete mode 100644 types/config/types/subconfigs/security/twofactor.rs delete mode 100644 types/config/types/template_configuration.rs delete mode 100644 types/entities/application.rs delete mode 100644 types/entities/attachment.rs delete mode 100644 types/entities/channel.rs delete mode 100644 types/entities/config.rs delete mode 100644 types/entities/emoji.rs delete mode 100644 types/entities/guild.rs delete mode 100644 types/entities/guild_member.rs delete mode 100644 types/entities/integration.rs delete mode 100644 types/entities/message.rs delete mode 100644 types/entities/mod.rs delete mode 100644 types/entities/role.rs delete mode 100644 types/entities/security_key.rs delete mode 100644 types/entities/sticker.rs delete mode 100644 types/entities/team.rs delete mode 100644 types/entities/template.rs delete mode 100644 types/entities/user.rs delete mode 100644 types/entities/user_settings.rs delete mode 100644 types/entities/voice_state.rs delete mode 100644 types/entities/webhook.rs delete mode 100644 types/errors.rs delete mode 100644 types/events/channel.rs delete mode 100644 types/events/guild.rs delete mode 100644 types/events/heartbeat.rs delete mode 100644 types/events/hello.rs delete mode 100644 types/events/identify.rs delete mode 100644 types/events/message.rs delete mode 100644 types/events/mod.rs delete mode 100644 types/events/presence.rs delete mode 100644 types/events/ready.rs delete mode 100644 types/events/request_members.rs delete mode 100644 types/events/resume.rs delete mode 100644 types/events/thread.rs delete mode 100644 types/events/user.rs delete mode 100644 types/events/voice_status.rs delete mode 100644 types/interfaces/activity.rs delete mode 100644 types/interfaces/connected_account.rs delete mode 100644 types/interfaces/guild_welcome_screen.rs delete mode 100644 types/interfaces/interaction.rs delete mode 100644 types/interfaces/mod.rs delete mode 100644 types/interfaces/status.rs delete mode 100644 types/lib.rs delete mode 100644 types/schema/apierror.rs delete mode 100644 types/schema/auth.rs delete mode 100644 types/schema/channel.rs delete mode 100644 types/schema/guild.rs delete mode 100644 types/schema/message.rs delete mode 100644 types/schema/mod.rs delete mode 100644 types/schema/user.rs delete mode 100644 types/utils/jwt.rs delete mode 100644 types/utils/mod.rs delete mode 100644 types/utils/regexes.rs delete mode 100644 types/utils/rights.rs delete mode 100644 types/utils/snowflake.rs diff --git a/types/config/mod.rs b/types/config/mod.rs deleted file mode 100644 index 97b830a..0000000 --- a/types/config/mod.rs +++ /dev/null @@ -1,187 +0,0 @@ -use serde::{Deserialize, Serialize}; -use serde_json::{Map, Value}; - -pub use crate::{ - config::types::{ - api_configuration::ApiConfiguration, cdn_configuration::CdnConfiguration, - defaults_configuration::DefaultsConfiguration, email_configuration::EmailConfiguration, - endpoint_configuration::EndpointConfiguration, - external_tokens_configuration::ExternalTokensConfiguration, - general_configuration::GeneralConfiguration, gif_configuration::GifConfiguration, - guild_configuration::GuildConfiguration, kafka_configuration::KafkaConfiguration, - limit_configuration::LimitsConfiguration, login_configuration::LoginConfiguration, - metrics_configuration::MetricsConfiguration, - password_reset_configuration::PasswordResetConfiguration, - rabbit_mq_configuration::RabbitMQConfiguration, region_configuration::RegionConfiguration, - register_configuration::RegisterConfiguration, - security_configuration::SecurityConfiguration, sentry_configuration::SentryConfiguration, - template_configuration::TemplateConfiguration, - }, - entities::ConfigEntity, -}; - -mod types; - -#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ConfigValue { - pub gateway: EndpointConfiguration, - pub cdn: CdnConfiguration, - pub api: ApiConfiguration, - pub general: GeneralConfiguration, - pub limits: LimitsConfiguration, - pub security: SecurityConfiguration, - pub login: LoginConfiguration, - pub register: RegisterConfiguration, - pub regions: RegionConfiguration, - pub guild: GuildConfiguration, - pub gif: GifConfiguration, - pub rabbitmq: RabbitMQConfiguration, - pub kafka: KafkaConfiguration, - pub templates: TemplateConfiguration, - pub metrics: MetricsConfiguration, - pub sentry: SentryConfiguration, - pub defaults: DefaultsConfiguration, - pub external: ExternalTokensConfiguration, - pub email: EmailConfiguration, - pub password_reset: PasswordResetConfiguration, -} - -impl ConfigValue { - pub fn to_pairs(&self) -> Vec { - let v = serde_json::json!(self); - - generate_pairs(&v, "") - } - - pub fn from_pairs(pairs: Vec) -> Self { - pairs_to_config(pairs) - } -} - -fn generate_pairs(obj: &Value, key: &str) -> Vec { - let mut pairs = Vec::new(); - match obj { - Value::Object(map) => { - for (k, v) in map { - let new_key = if key.is_empty() { - k.to_string() - } else { - format!("{}_{}", key, k) - }; - pairs.extend(generate_pairs(v, &new_key)); - } - } - Value::Array(arr) => { - for (i, v) in arr.iter().enumerate() { - let new_key = format!("{}_{}", key, i); - pairs.extend(generate_pairs(v, &new_key)); - } - } - _ => pairs.push(ConfigEntity { - key: key.to_string(), - value: Some(obj.clone()), - }), - } - pairs -} - -fn pairs_to_config(pairs: Vec) -> ConfigValue { - let mut value = Value::Object(Map::new()); - - for p in pairs { - let keys: Vec<&str> = p.key.split('_').collect(); - let mut path = vec![]; - - for (i, &key) in keys.iter().enumerate() { - path.push(key); - - if i == keys.len() - 1 { - insert_into(&mut value, &path, p.value.clone().unwrap_or(Value::Null)); - } else if keys[i+1].parse::().is_ok() { - if !path_exists(&value, &path) { - insert_into(&mut value, &path, Value::Array(Vec::new())); - } - } else if !path_exists(&value, &path) { - insert_into(&mut value, &path, Value::Object(Map::new())); - } - } - } - - serde_json::from_value(value).unwrap() -} - -fn path_exists(value: &Value, path: &[&str]) -> bool { - let mut current = value; - - for &key in path { - match current { - Value::Object(map) => { - if let Some(v) = map.get(key) { - current = v; - } else { - return false; - } - }, - Value::Array(arr) => { - if let Ok(index) = key.parse::() { - if let Some(v) = arr.get(index) { - current = v; - } else { - return false; - } - } else { - return false; - } - }, - _ => return false, - } - } - - true -} - -fn insert_into(value: &mut Value, path: &[&str], new_value: Value) { - let last_key = path.last().unwrap(); - let parent_path = &path[0..path.len()-1]; - - let mut current = value; - - for &key in parent_path { - current = match current { - Value::Object(map) => map.get_mut(key).unwrap(), - Value::Array(arr) => arr.get_mut(key.parse::().unwrap()).unwrap(), - _ => unreachable!(), - }; - } - - match current { - Value::Object(map) => { - map.insert((*last_key).to_string(), new_value); - }, - Value::Array(arr) => { - let index = last_key.parse::().unwrap(); - if index >= arr.len() { - arr.resize(index + 1, Value::Null); - } - arr[index] = new_value; - }, - _ => unreachable!(), - }; -} - -#[cfg(test)] -mod test { - use crate::config::{generate_pairs, pairs_to_config, ConfigValue}; - - #[test] - fn test_pairs() { - let c = ConfigValue::default(); - let v = serde_json::json!(&c); - - let pairs = generate_pairs(&v, ""); - - let cfg = pairs_to_config(pairs); - assert_eq!(cfg, c) - } -} diff --git a/types/config/types/api_configuration.rs b/types/config/types/api_configuration.rs deleted file mode 100644 index 2d617fe..0000000 --- a/types/config/types/api_configuration.rs +++ /dev/null @@ -1,24 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct ApiConfiguration { - pub default_version: String, - pub active_versions: Vec, - pub endpoint_public: Option, -} - -impl Default for ApiConfiguration { - fn default() -> Self { - Self { - default_version: String::from("9"), - active_versions: vec![ - String::from("6"), - String::from("7"), - String::from("8"), - String::from("9"), - ], - endpoint_public: None, - } - } -} diff --git a/types/config/types/cdn_configuration.rs b/types/config/types/cdn_configuration.rs deleted file mode 100644 index 5c76273..0000000 --- a/types/config/types/cdn_configuration.rs +++ /dev/null @@ -1,25 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct CdnConfiguration { - pub resize_height_max: u64, - pub resize_width_max: u64, - pub imagor_server_url: Option, - - pub endpoint_public: Option, - pub endpoint_private: Option, -} - -impl Default for CdnConfiguration { - fn default() -> Self { - Self { - resize_height_max: 1000, - resize_width_max: 1000, - imagor_server_url: None, - - endpoint_private: None, - endpoint_public: None, - } - } -} diff --git a/types/config/types/defaults_configuration.rs b/types/config/types/defaults_configuration.rs deleted file mode 100644 index b89b304..0000000 --- a/types/config/types/defaults_configuration.rs +++ /dev/null @@ -1,10 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::config::types::subconfigs::defaults::{guild::GuildDefaults, user::UserDefaults}; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct DefaultsConfiguration { - pub guild: GuildDefaults, - pub user: UserDefaults, -} diff --git a/types/config/types/email_configuration.rs b/types/config/types/email_configuration.rs deleted file mode 100644 index 3025487..0000000 --- a/types/config/types/email_configuration.rs +++ /dev/null @@ -1,27 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::config::types::subconfigs::email::{ - mailgun::MailGunConfiguration, mailjet::MailJetConfiguration, sendgrid::SendGridConfiguration, - smtp::SMTPConfiguration, -}; - -#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)] -pub enum EmailProvider { - Smtp, - MailGun, - MailJet, - SendGrid, -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -#[derive(Default)] -pub struct EmailConfiguration { - pub provider: Option, - pub smtp: SMTPConfiguration, - pub mailgun: MailGunConfiguration, - pub mailjet: MailJetConfiguration, - pub sendgrid: SendGridConfiguration, -} - - diff --git a/types/config/types/endpoint_configuration.rs b/types/config/types/endpoint_configuration.rs deleted file mode 100644 index b484791..0000000 --- a/types/config/types/endpoint_configuration.rs +++ /dev/null @@ -1,9 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct EndpointConfiguration { - pub endpoint_client: Option, - pub endpoint_private: Option, - pub endpoint_public: Option, -} diff --git a/types/config/types/external_tokens_configuration.rs b/types/config/types/external_tokens_configuration.rs deleted file mode 100644 index f417b2f..0000000 --- a/types/config/types/external_tokens_configuration.rs +++ /dev/null @@ -1,7 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ExternalTokensConfiguration { - pub twitter: Option, -} diff --git a/types/config/types/general_configuration.rs b/types/config/types/general_configuration.rs deleted file mode 100644 index f67fdf2..0000000 --- a/types/config/types/general_configuration.rs +++ /dev/null @@ -1,35 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::utils::Snowflake; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct GeneralConfiguration { - pub instance_name: String, - pub instance_description: Option, - pub front_page: Option, - pub tos_page: Option, - pub correspondence_email: Option, - pub correspondence_user_id: Option, - pub image: Option, - pub instance_id: Option, - pub auto_create_bot_users: Option, -} - -impl Default for GeneralConfiguration { - fn default() -> Self { - Self { - instance_name: String::from("Spacebar Instance"), - instance_description: Some(String::from( - "This is a Spacebar instance made in the pre-release days", - )), - front_page: None, - tos_page: None, - correspondence_email: None, - correspondence_user_id: None, - image: None, - instance_id: Some(Snowflake::generate()), - auto_create_bot_users: Some(false), - } - } -} diff --git a/types/config/types/gif_configuration.rs b/types/config/types/gif_configuration.rs deleted file mode 100644 index 8644fb4..0000000 --- a/types/config/types/gif_configuration.rs +++ /dev/null @@ -1,26 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "lowercase")] -pub enum GifProvider { - #[default] - Tenor, -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct GifConfiguration { - pub enabled: bool, - pub provider: GifProvider, - pub api_key: Option, -} - -impl Default for GifConfiguration { - fn default() -> Self { - Self { - enabled: true, - provider: GifProvider::Tenor, - api_key: Some(String::from("LIVDSRZULELA")), - } - } -} diff --git a/types/config/types/guild_configuration.rs b/types/config/types/guild_configuration.rs deleted file mode 100644 index 536396e..0000000 --- a/types/config/types/guild_configuration.rs +++ /dev/null @@ -1,126 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::config::types::subconfigs::guild::{ - autojoin::AutoJoinConfiguration, discovery::DiscoverConfiguration, -}; - -#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)] -#[serde(rename_all = "SCREAMING_SNAKE_CASE")] -pub enum GuildFeatures { - ActivitiesAlpha, - ActivitiesEmployee, - ActivitiesInternalDev, - AnimatedBanner, - AnimatedIcon, - ApplicationCommandPermissionsV2, - AutoModeration, - AutoModTriggerKeywordFilter, - AutoModTriggerMLSpamFilter, - AutoModTriggerSpamLinkFilter, - AutoModTriggerUserProfile, - Banner, - BFG, - BoostingTiersExperimentMediumGuild, - BoostingTiersExperimentSmallGuild, - BotDeveloperEarlyAccess, - BurstReactions, - CommunityCanary, - CommunityExpLargeGated, - CommunityExpLargeUngated, - CommunityExpMedium, - ChannelEmojisGenerated, - ChannelHighlights, - ChannelHighlightsDisabled, - ClydeEnabled, - ClydeExperimentEnabled, - ClydeDisabled, - Community, - CreatorAcceptedNewTerms, - CreatorMonetizable, - CreatorMonetizableDisabled, - CreatorMonetizablePendingNewOwnerOnboarding, - CreatorMonetizableProvisional, - CreatorMonetizableRestricted, - CreatorMonetizableWhiteglove, - CreatorMonetizableApplicationAllowlist, - CreateStorePage, - DeveloperSupportServer, - DiscoverableDisabled, - Discoverable, - EnabledDiscoverableBefore, - ExposedToActivitiesWTPExperiment, - GuestsEnabled, - GuildAutomodDefaultList, - GuildCommunicationDisabledGuilds, - GuildHomeDeprecationOverride, - GuildHomeOverride, - GuildHomeTest, - GuildMemberVerificationExperiment, - GuildOnboarding, - GuildOnboardingAdminOnly, - GuildOnboardingEverEnabled, - GuildOnboardingHasPrompts, - GuildRoleSubscription, - GuildRoleSubscriptionPurchaseFeedbackLoop, - GuildRoleSubscriptionTrials, - GuildServerGuide, - GuildWebPageVanityURL, - HadEarlyActivitiesAccess, - HasDirectoryEntry, - HideFromExperimentUI, - Hub, - IncreasedThreadLimit, - InternalEmployeeOnly, - InviteSplash, - InvitesDisabled, - LinkedToHub, - MarketplacesConnectionRoles, - MemberProfiles, - MemberVerificationGateEnabled, - MemberVerificationManualApproval, - MobileWebRoleSubscriptionPurchasePage, - MonetizationEnabled, - MoreEmoji, - MoreStickers, - News, - NewThreadPermissions, - Partnered, - PremiumTier3Override, - PreviewEnabled, - RaidAlertsDisabled, - RelayEnabled, - RestrictSpamRiskGuild, - RoleIcons, - RoleSubscriptionsAvailableForPurchase, - RoleSubscriptionsEnabled, - RoleSubscriptionsEnabledForPurchase, - Shard, - SharedCanvasFriendsAndFamilyTest, - Soundboard, - SummariesEnabled, - SummariesEnabledGA, - SummariesDisabledByUser, - SummariesEnabledByUser, - TextInStageEnabled, - TextInVoiceEnabled, - ThreadsEnabledTesting, - ThreadsEnabled, - ThreadDefaultAutoArchiveDuration, - ThreadsOnlyChannel, - TicketedEventsEnabled, - TicketingEnabled, - VanityUrls, - Verified, - VIPRegions, - VoiceChannelEffects, - WelcomeScreenEnabled, -} - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct GuildConfiguration { - pub discovery: DiscoverConfiguration, - pub auto_join: AutoJoinConfiguration, - #[serde(default)] - pub default_features: Vec, -} diff --git a/types/config/types/kafka_configuration.rs b/types/config/types/kafka_configuration.rs deleted file mode 100644 index 050ffc3..0000000 --- a/types/config/types/kafka_configuration.rs +++ /dev/null @@ -1,10 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::config::types::subconfigs::kafka::KafkaBroker; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct KafkaConfiguration { - #[serde(default)] - pub brokers: Option>, -} diff --git a/types/config/types/limit_configuration.rs b/types/config/types/limit_configuration.rs deleted file mode 100644 index ad2ad17..0000000 --- a/types/config/types/limit_configuration.rs +++ /dev/null @@ -1,17 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::config::types::subconfigs::limits::{ - channel::ChannelLimits, global::GlobalRateLimits, guild::GuildLimits, message::MessageLimits, - rates::RateLimits, user::UserLimits, -}; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct LimitsConfiguration { - pub user: UserLimits, - pub guild: GuildLimits, - pub message: MessageLimits, - pub channel: ChannelLimits, - pub rate: RateLimits, - pub absolute_rate: GlobalRateLimits, -} diff --git a/types/config/types/login_configuration.rs b/types/config/types/login_configuration.rs deleted file mode 100644 index a2b1039..0000000 --- a/types/config/types/login_configuration.rs +++ /dev/null @@ -1,8 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct LoginConfiguration { - pub require_captcha: bool, - pub require_verification: bool, -} diff --git a/types/config/types/metrics_configuration.rs b/types/config/types/metrics_configuration.rs deleted file mode 100644 index 336ac84..0000000 --- a/types/config/types/metrics_configuration.rs +++ /dev/null @@ -1,13 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct MetricsConfiguration { - pub timeout: u64, -} - -impl Default for MetricsConfiguration { - fn default() -> Self { - Self { timeout: 30000 } - } -} diff --git a/types/config/types/mod.rs b/types/config/types/mod.rs deleted file mode 100644 index dce4eb0..0000000 --- a/types/config/types/mod.rs +++ /dev/null @@ -1,21 +0,0 @@ -pub mod api_configuration; -pub mod cdn_configuration; -pub mod defaults_configuration; -pub mod email_configuration; -pub mod endpoint_configuration; -pub mod external_tokens_configuration; -pub mod general_configuration; -pub mod gif_configuration; -pub mod guild_configuration; -pub mod kafka_configuration; -pub mod limit_configuration; -pub mod login_configuration; -pub mod metrics_configuration; -pub mod password_reset_configuration; -pub mod rabbit_mq_configuration; -pub mod region_configuration; -pub mod register_configuration; -pub mod security_configuration; -pub mod sentry_configuration; -pub mod subconfigs; -pub mod template_configuration; diff --git a/types/config/types/password_reset_configuration.rs b/types/config/types/password_reset_configuration.rs deleted file mode 100644 index 4dddae9..0000000 --- a/types/config/types/password_reset_configuration.rs +++ /dev/null @@ -1,7 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct PasswordResetConfiguration { - pub require_captcha: bool, -} diff --git a/types/config/types/rabbit_mq_configuration.rs b/types/config/types/rabbit_mq_configuration.rs deleted file mode 100644 index 2437055..0000000 --- a/types/config/types/rabbit_mq_configuration.rs +++ /dev/null @@ -1,7 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct RabbitMQConfiguration { - pub host: Option, -} diff --git a/types/config/types/region_configuration.rs b/types/config/types/region_configuration.rs deleted file mode 100644 index 065a8f7..0000000 --- a/types/config/types/region_configuration.rs +++ /dev/null @@ -1,29 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::config::types::subconfigs::region::Region; - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct RegionConfiguration { - pub default: String, - pub use_default_as_optimal: bool, - pub available: Vec, -} - -impl Default for RegionConfiguration { - fn default() -> Self { - Self { - default: String::from("spacebar"), - use_default_as_optimal: true, - available: vec![Region { - id: String::from("spacebar"), - name: String::from("spacebar"), - endpoint: String::from("127.0.0.1:3004"), - location: None, - vip: false, - custom: false, - deprecated: false, - }], - } - } -} diff --git a/types/config/types/register_configuration.rs b/types/config/types/register_configuration.rs deleted file mode 100644 index 304299a..0000000 --- a/types/config/types/register_configuration.rs +++ /dev/null @@ -1,41 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::config::types::subconfigs::register::{ - DateOfBirthConfiguration, PasswordConfiguration, RegistrationEmailConfiguration, -}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct RegisterConfiguration { - pub email: RegistrationEmailConfiguration, - pub date_of_birth: DateOfBirthConfiguration, - pub password: PasswordConfiguration, - pub disabled: bool, - pub require_captcha: bool, - pub require_invite: bool, - pub guests_require_invite: bool, - pub allow_new_registration: bool, - pub allow_multiple_accounts: bool, - pub block_proxies: bool, - pub incrementing_discriminators: bool, - pub default_rights: String, -} - -impl Default for RegisterConfiguration { - fn default() -> Self { - Self { - email: RegistrationEmailConfiguration::default(), - date_of_birth: DateOfBirthConfiguration::default(), - password: PasswordConfiguration::default(), - disabled: false, - require_captcha: true, - require_invite: false, - guests_require_invite: true, - allow_new_registration: true, - allow_multiple_accounts: true, - block_proxies: true, - incrementing_discriminators: false, - default_rights: String::from("875069521787904"), - } - } -} diff --git a/types/config/types/security_configuration.rs b/types/config/types/security_configuration.rs deleted file mode 100644 index 65008da..0000000 --- a/types/config/types/security_configuration.rs +++ /dev/null @@ -1,42 +0,0 @@ -use base64::Engine; -use serde::{Deserialize, Serialize}; - -use crate::config::types::subconfigs::security::{CaptchaConfiguration, TwoFactorConfiguration}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct SecurityConfiguration { - pub captcha: CaptchaConfiguration, - pub two_factor: TwoFactorConfiguration, - pub auto_update: bool, - pub request_signature: String, - pub jwt_secret: String, - pub forwarded_for: Option, - pub ipdata_api_key: Option, - pub mfa_backup_code_count: u8, - pub stats_world_readable: bool, - pub default_registration_token_expiration: u64, -} - -impl Default for SecurityConfiguration { - fn default() -> Self { - let mut req_sig: [u8; 32] = [0; 32]; - let _ = openssl::rand::rand_bytes(&mut req_sig); - let mut jwt_secret: [u8; 256] = [0; 256]; - let _ = openssl::rand::rand_bytes(&mut jwt_secret); - Self { - captcha: Default::default(), - two_factor: Default::default(), - auto_update: true, - request_signature: base64::engine::general_purpose::STANDARD.encode(req_sig), - jwt_secret: base64::engine::general_purpose::STANDARD.encode(jwt_secret), - forwarded_for: None, - ipdata_api_key: Some(String::from( - "eca677b284b3bac29eb72f5e496aa9047f26543605efe99ff2ce35c9", - )), - mfa_backup_code_count: 10, - stats_world_readable: true, - default_registration_token_expiration: 1000 * 60 * 60 * 24 * 7, - } - } -} diff --git a/types/config/types/sentry_configuration.rs b/types/config/types/sentry_configuration.rs deleted file mode 100644 index 256bab9..0000000 --- a/types/config/types/sentry_configuration.rs +++ /dev/null @@ -1,28 +0,0 @@ -use std::ffi::OsString; - -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct SentryConfiguration { - pub enabled: bool, - pub endpoint: String, - pub trace_sample_rate: f64, - pub environment: String, -} - -impl Default for SentryConfiguration { - fn default() -> Self { - Self { - enabled: false, - endpoint: String::from( - "https://241c6fb08adb469da1bb82522b25c99f@sentry.quartzinc.space/3", - ), - trace_sample_rate: 1.0, - environment: hostname::get() - .unwrap_or_else(|_| OsString::new()) - .to_string_lossy() - .to_string(), - } - } -} diff --git a/types/config/types/subconfigs/client/mod.rs b/types/config/types/subconfigs/client/mod.rs deleted file mode 100644 index 5d3d304..0000000 --- a/types/config/types/subconfigs/client/mod.rs +++ /dev/null @@ -1,17 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ClientReleaseConfiguration { - pub use_local_release: bool, - pub upstream_version: String, -} - -impl Default for ClientReleaseConfiguration { - fn default() -> Self { - Self { - use_local_release: true, - upstream_version: String::from("0.0.264"), - } - } -} diff --git a/types/config/types/subconfigs/defaults/guild.rs b/types/config/types/subconfigs/defaults/guild.rs deleted file mode 100644 index 966c7af..0000000 --- a/types/config/types/subconfigs/defaults/guild.rs +++ /dev/null @@ -1,23 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct GuildDefaults { - pub max_presences: u64, - pub max_video_channel_users: u16, - pub afk_timeout: u16, - pub default_message_notifications: u8, - pub explicit_content_filter: u8, -} - -impl Default for GuildDefaults { - fn default() -> Self { - Self { - max_presences: 250_000, - max_video_channel_users: 200, - afk_timeout: 300, - default_message_notifications: 1, - explicit_content_filter: 0, - } - } -} diff --git a/types/config/types/subconfigs/defaults/mod.rs b/types/config/types/subconfigs/defaults/mod.rs deleted file mode 100644 index 56d877f..0000000 --- a/types/config/types/subconfigs/defaults/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod guild; -pub mod user; diff --git a/types/config/types/subconfigs/defaults/user.rs b/types/config/types/subconfigs/defaults/user.rs deleted file mode 100644 index 635d6d4..0000000 --- a/types/config/types/subconfigs/defaults/user.rs +++ /dev/null @@ -1,19 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct UserDefaults { - pub premium: bool, - pub premium_type: u8, - pub verified: bool, -} - -impl Default for UserDefaults { - fn default() -> Self { - Self { - premium: true, - premium_type: 2, - verified: true, - } - } -} diff --git a/types/config/types/subconfigs/email/mailgun.rs b/types/config/types/subconfigs/email/mailgun.rs deleted file mode 100644 index 636e462..0000000 --- a/types/config/types/subconfigs/email/mailgun.rs +++ /dev/null @@ -1,8 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct MailGunConfiguration { - pub api_key: Option, - pub domain: Option, -} diff --git a/types/config/types/subconfigs/email/mailjet.rs b/types/config/types/subconfigs/email/mailjet.rs deleted file mode 100644 index 4e505c1..0000000 --- a/types/config/types/subconfigs/email/mailjet.rs +++ /dev/null @@ -1,8 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct MailJetConfiguration { - pub api_key: Option, - pub api_secret: Option, -} diff --git a/types/config/types/subconfigs/email/mod.rs b/types/config/types/subconfigs/email/mod.rs deleted file mode 100644 index 21253fd..0000000 --- a/types/config/types/subconfigs/email/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod mailgun; -pub mod mailjet; -pub mod sendgrid; -pub mod smtp; diff --git a/types/config/types/subconfigs/email/sendgrid.rs b/types/config/types/subconfigs/email/sendgrid.rs deleted file mode 100644 index 879c719..0000000 --- a/types/config/types/subconfigs/email/sendgrid.rs +++ /dev/null @@ -1,7 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct SendGridConfiguration { - pub api_key: Option, -} diff --git a/types/config/types/subconfigs/email/smtp.rs b/types/config/types/subconfigs/email/smtp.rs deleted file mode 100644 index a02c66f..0000000 --- a/types/config/types/subconfigs/email/smtp.rs +++ /dev/null @@ -1,10 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] -pub struct SMTPConfiguration { - pub host: Option, - pub port: Option, - pub secure: bool, - pub username: Option, - pub password: Option, -} diff --git a/types/config/types/subconfigs/guild/autojoin.rs b/types/config/types/subconfigs/guild/autojoin.rs deleted file mode 100644 index 2d88d46..0000000 --- a/types/config/types/subconfigs/guild/autojoin.rs +++ /dev/null @@ -1,22 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::utils::Snowflake; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct AutoJoinConfiguration { - pub enabled: bool, - #[serde(skip_serializing_if = "Option::is_none")] - pub guilds: Option>, - pub can_leave: bool, -} - -impl Default for AutoJoinConfiguration { - fn default() -> Self { - Self { - enabled: true, - guilds: None, - can_leave: true, - } - } -} diff --git a/types/config/types/subconfigs/guild/discovery.rs b/types/config/types/subconfigs/guild/discovery.rs deleted file mode 100644 index 1e283b0..0000000 --- a/types/config/types/subconfigs/guild/discovery.rs +++ /dev/null @@ -1,21 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct DiscoverConfiguration { - pub show_all_guilds: bool, - pub use_recommendation: bool, - pub offset: u16, - pub limit: u16, -} - -impl Default for DiscoverConfiguration { - fn default() -> Self { - Self { - show_all_guilds: false, - use_recommendation: false, - offset: 0, - limit: 24, - } - } -} diff --git a/types/config/types/subconfigs/guild/mod.rs b/types/config/types/subconfigs/guild/mod.rs deleted file mode 100644 index e4d7dcf..0000000 --- a/types/config/types/subconfigs/guild/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod autojoin; -pub mod discovery; diff --git a/types/config/types/subconfigs/kafka/mod.rs b/types/config/types/subconfigs/kafka/mod.rs deleted file mode 100644 index 1ee4015..0000000 --- a/types/config/types/subconfigs/kafka/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct KafkaBroker { - pub ip: String, - pub port: u16, -} diff --git a/types/config/types/subconfigs/limits/channel.rs b/types/config/types/subconfigs/limits/channel.rs deleted file mode 100644 index 03e46e5..0000000 --- a/types/config/types/subconfigs/limits/channel.rs +++ /dev/null @@ -1,19 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct ChannelLimits { - pub max_pins: u16, - pub max_topic: u16, - pub max_webhooks: u16, -} - -impl Default for ChannelLimits { - fn default() -> Self { - Self { - max_pins: 500, - max_topic: 1024, - max_webhooks: 100, - } - } -} diff --git a/types/config/types/subconfigs/limits/global.rs b/types/config/types/subconfigs/limits/global.rs deleted file mode 100644 index 87f9e1c..0000000 --- a/types/config/types/subconfigs/limits/global.rs +++ /dev/null @@ -1,41 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct GlobalRateLimit { - pub limit: u16, - pub window: u64, - pub enabled: bool, -} - -impl Default for GlobalRateLimit { - fn default() -> Self { - Self { - limit: 100, - window: 60 * 60 * 1000, - enabled: true, - } - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct GlobalRateLimits { - pub register: GlobalRateLimit, - pub send_message: GlobalRateLimit, -} - -impl Default for GlobalRateLimits { - fn default() -> Self { - Self { - register: GlobalRateLimit { - limit: 25, - ..Default::default() - }, - send_message: GlobalRateLimit { - limit: 200, - window: 60 * 1000, - ..Default::default() - }, - } - } -} diff --git a/types/config/types/subconfigs/limits/guild.rs b/types/config/types/subconfigs/limits/guild.rs deleted file mode 100644 index 6def5a0..0000000 --- a/types/config/types/subconfigs/limits/guild.rs +++ /dev/null @@ -1,23 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct GuildLimits { - pub max_roles: u16, - pub max_emojis: u16, - pub max_members: u64, - pub max_channels: u32, - pub max_channels_in_category: u32, -} - -impl Default for GuildLimits { - fn default() -> Self { - Self { - max_roles: 1000, - max_emojis: 20_000, - max_members: 25_000_000, - max_channels: 65_535, - max_channels_in_category: 65_535, - } - } -} diff --git a/types/config/types/subconfigs/limits/message.rs b/types/config/types/subconfigs/limits/message.rs deleted file mode 100644 index 9d368b9..0000000 --- a/types/config/types/subconfigs/limits/message.rs +++ /dev/null @@ -1,26 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct MessageLimits { - pub max_characters: u32, - #[serde(default)] - pub max_tts_characters: u32, - pub max_reactions: u32, - pub max_attachment_size: u64, - pub max_bulk_delete: u32, - pub max_embed_download_size: u64, -} - -impl Default for MessageLimits { - fn default() -> Self { - Self { - max_characters: 1048576, - max_tts_characters: 160, - max_reactions: 2048, - max_attachment_size: 1024 * 1024 * 1024, - max_bulk_delete: 1000, - max_embed_download_size: 1024 * 1024 * 5, - } - } -} diff --git a/types/config/types/subconfigs/limits/mod.rs b/types/config/types/subconfigs/limits/mod.rs deleted file mode 100644 index 4dbc2fa..0000000 --- a/types/config/types/subconfigs/limits/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -pub mod channel; -pub mod global; -pub mod guild; -pub mod message; -pub mod ratelimits; -pub mod rates; -pub mod user; diff --git a/types/config/types/subconfigs/limits/ratelimits/auth.rs b/types/config/types/subconfigs/limits/ratelimits/auth.rs deleted file mode 100644 index 3bfdccc..0000000 --- a/types/config/types/subconfigs/limits/ratelimits/auth.rs +++ /dev/null @@ -1,28 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::config::types::subconfigs::limits::ratelimits::RateLimitOptions; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct AuthRateLimit { - pub login: RateLimitOptions, - pub register: RateLimitOptions, -} - -impl Default for AuthRateLimit { - fn default() -> Self { - Self { - login: RateLimitOptions { - bot: None, - count: 5, - window: 60, - only_ip: false, - }, - register: RateLimitOptions { - bot: None, - count: 2, - window: 60 * 60 * 12, - only_ip: false, - }, - } - } -} diff --git a/types/config/types/subconfigs/limits/ratelimits/mod.rs b/types/config/types/subconfigs/limits/ratelimits/mod.rs deleted file mode 100644 index 66a2b78..0000000 --- a/types/config/types/subconfigs/limits/ratelimits/mod.rs +++ /dev/null @@ -1,14 +0,0 @@ -use serde::{Deserialize, Serialize}; - -pub mod auth; -pub mod route; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct RateLimitOptions { - pub bot: Option, - pub count: u64, - pub window: u64, - #[serde(default)] - pub only_ip: bool, -} diff --git a/types/config/types/subconfigs/limits/ratelimits/route.rs b/types/config/types/subconfigs/limits/ratelimits/route.rs deleted file mode 100644 index 04e5a42..0000000 --- a/types/config/types/subconfigs/limits/ratelimits/route.rs +++ /dev/null @@ -1,37 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::config::types::subconfigs::limits::ratelimits::{auth::AuthRateLimit, RateLimitOptions}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct RouteRateLimit { - pub guild: RateLimitOptions, - pub webhook: RateLimitOptions, - pub channel: RateLimitOptions, - pub auth: AuthRateLimit, -} - -impl Default for RouteRateLimit { - fn default() -> Self { - Self { - guild: RateLimitOptions { - bot: None, - count: 5, - window: 5, - only_ip: false, - }, - webhook: RateLimitOptions { - bot: None, - count: 10, - window: 5, - only_ip: false, - }, - channel: RateLimitOptions { - bot: None, - count: 10, - window: 5, - only_ip: false, - }, - auth: AuthRateLimit::default(), - } - } -} diff --git a/types/config/types/subconfigs/limits/rates.rs b/types/config/types/subconfigs/limits/rates.rs deleted file mode 100644 index 3185b37..0000000 --- a/types/config/types/subconfigs/limits/rates.rs +++ /dev/null @@ -1,41 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::config::types::subconfigs::limits::ratelimits::{ - route::RouteRateLimit, RateLimitOptions, -}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct RateLimits { - pub enabled: bool, - pub ip: RateLimitOptions, - pub global: RateLimitOptions, - pub error: RateLimitOptions, - pub routes: RouteRateLimit, -} - -impl Default for RateLimits { - fn default() -> Self { - Self { - enabled: false, - ip: RateLimitOptions { - bot: None, - count: 500, - window: 5, - only_ip: false, - }, - global: RateLimitOptions { - bot: None, - count: 250, - window: 5, - only_ip: false, - }, - error: RateLimitOptions { - bot: None, - count: 10, - window: 5, - only_ip: false, - }, - routes: RouteRateLimit::default(), - } - } -} diff --git a/types/config/types/subconfigs/limits/user.rs b/types/config/types/subconfigs/limits/user.rs deleted file mode 100644 index e43b746..0000000 --- a/types/config/types/subconfigs/limits/user.rs +++ /dev/null @@ -1,19 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct UserLimits { - pub max_guilds: u64, - pub max_username: u16, - pub max_friends: u64, -} - -impl Default for UserLimits { - fn default() -> Self { - Self { - max_guilds: 1048576, - max_username: 32, - max_friends: 5000, - } - } -} diff --git a/types/config/types/subconfigs/mod.rs b/types/config/types/subconfigs/mod.rs deleted file mode 100644 index 4c85096..0000000 --- a/types/config/types/subconfigs/mod.rs +++ /dev/null @@ -1,9 +0,0 @@ -pub mod client; -pub mod defaults; -pub mod email; -pub mod guild; -pub mod kafka; -pub mod limits; -pub mod region; -pub mod register; -pub mod security; diff --git a/types/config/types/subconfigs/region/mod.rs b/types/config/types/subconfigs/region/mod.rs deleted file mode 100644 index e0b1800..0000000 --- a/types/config/types/subconfigs/region/mod.rs +++ /dev/null @@ -1,21 +0,0 @@ -use serde::{Deserialize, Serialize}; - - - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct LatLong { - pub latitude: f64, - pub longitude: f64, -} - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct Region { - pub id: String, - pub name: String, - pub endpoint: String, - pub location: Option, - pub vip: bool, - pub custom: bool, - #[serde(default)] - pub deprecated: bool, -} diff --git a/types/config/types/subconfigs/register/date_of_birth.rs b/types/config/types/subconfigs/register/date_of_birth.rs deleted file mode 100644 index 9c1bec1..0000000 --- a/types/config/types/subconfigs/register/date_of_birth.rs +++ /dev/null @@ -1,16 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct DateOfBirthConfiguration { - pub required: bool, - pub minimum: u8, -} - -impl Default for DateOfBirthConfiguration { - fn default() -> Self { - Self { - required: true, - minimum: 13, - } - } -} diff --git a/types/config/types/subconfigs/register/email.rs b/types/config/types/subconfigs/register/email.rs deleted file mode 100644 index ac99bfc..0000000 --- a/types/config/types/subconfigs/register/email.rs +++ /dev/null @@ -1,21 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct RegistrationEmailConfiguration { - pub required: bool, - pub allowlist: bool, - #[serde(default)] - pub blacklist: bool, - #[serde(default)] - pub domains: Vec, -} -impl Default for RegistrationEmailConfiguration { - fn default() -> Self { - Self { - required: false, - allowlist: false, - blacklist: true, - domains: Vec::new(), - } - } -} diff --git a/types/config/types/subconfigs/register/mod.rs b/types/config/types/subconfigs/register/mod.rs deleted file mode 100644 index ad92571..0000000 --- a/types/config/types/subconfigs/register/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod date_of_birth; -mod email; -mod password; - -pub use date_of_birth::DateOfBirthConfiguration; -pub use email::RegistrationEmailConfiguration; -pub use password::PasswordConfiguration; diff --git a/types/config/types/subconfigs/register/password.rs b/types/config/types/subconfigs/register/password.rs deleted file mode 100644 index 9247f7d..0000000 --- a/types/config/types/subconfigs/register/password.rs +++ /dev/null @@ -1,23 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct PasswordConfiguration { - pub required: bool, - pub min_length: u8, - pub min_numbers: u8, - pub min_upper_case: u8, - pub min_symbols: u8, -} - -impl Default for PasswordConfiguration { - fn default() -> Self { - Self { - required: false, - min_length: 8, - min_numbers: 2, - min_upper_case: 2, - min_symbols: 0, - } - } -} diff --git a/types/config/types/subconfigs/security/captcha.rs b/types/config/types/subconfigs/security/captcha.rs deleted file mode 100644 index 82bb517..0000000 --- a/types/config/types/subconfigs/security/captcha.rs +++ /dev/null @@ -1,27 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "lowercase")] -pub enum CaptchaService { - Recaptcha, - HCaptcha, -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct CaptchaConfiguration { - pub enabled: bool, - pub service: CaptchaService, - pub sitekey: Option, - pub secret: Option, -} - -impl Default for CaptchaConfiguration { - fn default() -> Self { - Self { - enabled: false, - service: CaptchaService::HCaptcha, - sitekey: None, - secret: None, - } - } -} diff --git a/types/config/types/subconfigs/security/mod.rs b/types/config/types/subconfigs/security/mod.rs deleted file mode 100644 index ceeb0d3..0000000 --- a/types/config/types/subconfigs/security/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -mod captcha; -mod twofactor; - -pub use captcha::{CaptchaConfiguration, CaptchaService}; -pub use twofactor::TwoFactorConfiguration; diff --git a/types/config/types/subconfigs/security/twofactor.rs b/types/config/types/subconfigs/security/twofactor.rs deleted file mode 100644 index 39a0373..0000000 --- a/types/config/types/subconfigs/security/twofactor.rs +++ /dev/null @@ -1,15 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct TwoFactorConfiguration { - pub generate_backup_codes: bool, -} - -impl Default for TwoFactorConfiguration { - fn default() -> Self { - Self { - generate_backup_codes: true, - } - } -} diff --git a/types/config/types/template_configuration.rs b/types/config/types/template_configuration.rs deleted file mode 100644 index 932670e..0000000 --- a/types/config/types/template_configuration.rs +++ /dev/null @@ -1,21 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -pub struct TemplateConfiguration { - pub enabled: bool, - pub allow_template_creation: bool, - pub allow_discord_templates: bool, - pub allow_raws: bool, -} - -impl Default for TemplateConfiguration { - fn default() -> Self { - Self { - enabled: true, - allow_template_creation: true, - allow_discord_templates: true, - allow_raws: true, - } - } -} diff --git a/types/entities/application.rs b/types/entities/application.rs deleted file mode 100644 index b838a5b..0000000 --- a/types/entities/application.rs +++ /dev/null @@ -1,140 +0,0 @@ - - -use crate::utils::Snowflake; -use bitflags::{bitflags, Flags}; -use serde::{Deserialize, Serialize}; -use serde_json::Value; -#[cfg(feature = "sqlx")] -use sqlx::FromRow; - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -#[cfg_attr(feature = "sqlx", derive(FromRow))] -pub struct Application { - pub id: Snowflake, - pub name: String, - pub icon: Option, - pub description: Option, - pub summary: Option, - #[cfg(feature = "sqlx")] - pub r#type: Option>, - #[cfg(not(feature = "sqlx"))] - pub r#type: Option, - pub hook: bool, - pub bot_public: bool, - pub bot_require_code_grant: bool, - pub verify_key: String, - pub owner_id: Snowflake, - pub flags: u64, - #[cfg(feature = "sqlx")] - pub redirect_uris: Option>>, - #[cfg(not(feature = "sqlx"))] - pub redirect_uris: Option>, - pub rpc_application_state: i64, - pub store_application_state: i64, - pub verification_state: i64, - pub interactions_endpoint_url: Option, - pub integration_public: bool, - pub integration_require_code_grant: bool, - pub discoverability_state: i64, - pub discovery_eligibility_flags: i64, - pub bot_user_id: Snowflake, - #[cfg(feature = "sqlx")] - pub tags: Option>>, - #[cfg(not(feature = "sqlx"))] - pub tags: Option>, - pub cover_image: Option, - #[cfg(feature = "sqlx")] - pub install_params: Option>, - #[cfg(not(feature = "sqlx"))] - pub install_params: Option, - pub terms_of_service_url: Option, - pub privacy_policy_url: Option, - pub team_id: Option, -} - -impl Application { - pub fn flags(&self) -> ApplicationFlags { - ApplicationFlags::from_bits(self.flags.to_owned()).unwrap() - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct InstallParams { - pub scopes: Vec, - pub permissions: String, -} - -bitflags! { - #[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] - pub struct ApplicationFlags: u64 { - const APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE = 1 << 6; - const GATEWAY_PRESENCE = 1 << 12; - const GATEWAY_PRESENCE_LIMITED = 1 << 13; - const GATEWAY_GUILD_MEMBERS = 1 << 14; - const GATEWAY_GUILD_MEMBERS_LIMITED = 1 << 15; - const VERIFICATION_PENDING_GUILD_LIMIT = 1 << 16; - const EMBEDDED = 1 << 17; - const GATEWAY_MESSAGE_CONTENT = 1 << 18; - const GATEWAY_MESSAGE_CONTENT_LIMITED = 1 << 19; - const APPLICATION_COMMAND_BADGE = 1 << 23; - } -} - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct ApplicationCommand { - pub id: Snowflake, - pub application_id: Snowflake, - pub name: String, - pub description: String, - pub options: Vec, -} - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct ApplicationCommandOption { - pub r#type: ApplicationCommandOptionType, - pub name: String, - pub description: String, - pub required: bool, - pub choices: Vec, - pub options: Vec, -} - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct ApplicationCommandOptionChoice { - pub name: String, - pub value: Value, -} - -#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] -pub enum ApplicationCommandOptionType { - #[serde(rename = "SUB_COMMAND")] - SubCommand = 1, - #[serde(rename = "SUB_COMMAND_GROUP")] - SubCommandGroup = 2, - #[serde(rename = "STRING")] - String = 3, - #[serde(rename = "INTEGER")] - Integer = 4, - #[serde(rename = "BOOLEAN")] - Boolean = 5, - #[serde(rename = "USER")] - User = 6, - #[serde(rename = "CHANNEL")] - Channel = 7, - #[serde(rename = "ROLE")] - Role = 8, -} - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct ApplicationCommandInteractionData { - pub id: Snowflake, - pub name: String, - pub options: Vec, -} - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct ApplicationCommandInteractionDataOption { - pub name: String, - pub value: Value, - pub options: Vec, -} diff --git a/types/entities/attachment.rs b/types/entities/attachment.rs deleted file mode 100644 index 56384f7..0000000 --- a/types/entities/attachment.rs +++ /dev/null @@ -1,113 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::utils::Snowflake; - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct Attachment { - pub id: Snowflake, - pub filename: String, - pub description: Option, - pub content_type: Option, - pub size: u64, - pub url: String, - pub proxy_url: String, - pub height: Option, - pub width: Option, - pub message_id: Snowflake, - pub ephemeral: Option, - pub duration_secs: Option, - pub waveform: Option, - #[serde(skip_serializing)] - pub content: Vec, -} - -#[derive(Debug, Serialize, Deserialize, Clone)] - -pub struct PartialDiscordFileAttachment { - pub id: Option, - pub filename: String, - pub description: Option, - pub content_type: Option, - pub size: Option, - pub url: Option, - pub proxy_url: Option, - pub height: Option, - pub width: Option, - pub ephemeral: Option, - pub duration_secs: Option, - pub waveform: Option, - #[serde(skip_serializing)] - pub content: Vec, -} - -impl PartialDiscordFileAttachment { - /** - Moves `self.content` out of `self` and returns it. - # Returns - Vec - */ - pub fn move_content(self) -> (Vec, PartialDiscordFileAttachment) { - let content = self.content; - let updated_struct = PartialDiscordFileAttachment { - id: self.id, - filename: self.filename, - description: self.description, - content_type: self.content_type, - size: self.size, - url: self.url, - proxy_url: self.proxy_url, - height: self.height, - width: self.width, - ephemeral: self.ephemeral, - duration_secs: self.duration_secs, - waveform: self.waveform, - content: Vec::new(), - }; - (content, updated_struct) - } - - pub fn move_filename(self) -> (String, PartialDiscordFileAttachment) { - let filename = self.filename; - let updated_struct = PartialDiscordFileAttachment { - id: self.id, - filename: String::new(), - description: self.description, - content_type: self.content_type, - size: self.size, - url: self.url, - proxy_url: self.proxy_url, - height: self.height, - width: self.width, - - ephemeral: self.ephemeral, - duration_secs: self.duration_secs, - waveform: self.waveform, - content: self.content, - }; - (filename, updated_struct) - } - - pub fn move_content_type(self) -> (Option, PartialDiscordFileAttachment) { - let content_type = self.content_type; - let updated_struct = PartialDiscordFileAttachment { - id: self.id, - filename: self.filename, - description: self.description, - content_type: None, - size: self.size, - url: self.url, - proxy_url: self.proxy_url, - height: self.height, - width: self.width, - ephemeral: self.ephemeral, - duration_secs: self.duration_secs, - waveform: self.waveform, - content: self.content, - }; - (content_type, updated_struct) - } - - pub fn set_id(&mut self, id: i16) { - self.id = Some(id); - } -} diff --git a/types/entities/channel.rs b/types/entities/channel.rs deleted file mode 100644 index 71c65a1..0000000 --- a/types/entities/channel.rs +++ /dev/null @@ -1,116 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::{ - entities::{GuildMember, User}, - utils::Snowflake, -}; - -#[derive(Default, Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub struct Channel { - pub id: Snowflake, - #[serde(rename = "type")] - pub channel_type: ChannelType, - pub guild_id: Option, - pub position: Option, - pub permission_overwrites: Option>, - pub name: Option, - pub topic: Option, - pub nsfw: Option, - pub last_message_id: Option, - pub bitrate: Option, - pub user_limit: Option, - pub rate_limit_per_user: Option, - pub recipients: Option>, - pub icon: Option, - pub owner_id: Option, - pub application_id: Option, - pub parent_id: Option, - pub last_pin_timestamp: Option, - pub rtc_region: Option, - pub video_quality_mode: Option, - pub message_count: Option, - pub member_count: Option, - pub thread_metadata: Option, - pub member: Option, - pub default_auto_archive_duration: Option, - pub permissions: Option, - pub flags: Option, - pub total_message_sent: Option, - pub available_tags: Option>, - pub applied_tags: Option>, - pub default_reaction_emoji: Option, - pub default_thread_rate_limit_per_user: Option, - pub default_sort_order: Option, - pub default_forum_layout: Option, -} - -#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] -pub struct Tag { - pub id: u64, - pub name: String, - pub moderated: bool, - pub emoji_id: Option, - pub emoji_name: Option, -} - -#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)] -pub struct PermissionOverwrite { - pub id: String, - #[serde(rename = "type")] - pub overwrite_type: u8, - pub allow: String, - pub deny: String, -} - -#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] -pub struct ThreadMetadata { - pub archived: bool, - pub auto_archive_duration: i32, - pub archive_timestamp: String, - pub locked: bool, - pub invitable: Option, - pub create_timestamp: Option, -} - -#[derive(Default, Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] -pub struct ThreadMember { - pub id: Option, - pub user_id: Option, - pub join_timestamp: Option, - pub flags: Option, - pub member: Option, -} - -#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] -pub struct DefaultReaction { - pub emoji_id: Option, - pub emoji_name: Option, -} - -#[derive(Default, Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "SCREAMING_SNAKE_CASE")] -#[repr(i32)] -pub enum ChannelType { - #[default] - GuildText = 0, - Dm = 1, - GuildVoice = 2, - GroupDm = 3, - GuildCategory = 4, - GuildNews = 5, - GuildStore = 6, - Encrypted = 7, - EncryptedThreads = 8, - Transactional = 9, - GuildNewsThread = 10, - GuildPublicThread = 11, - GuildPrivateThread = 12, - GuildStageVoice = 13, - Directory = 14, - GuildForum = 15, - TicketTracker = 33, - Kanban = 34, - VoicelessWhiteboard = 35, - CustomStart = 64, - Unhandled = 255, -} diff --git a/types/entities/config.rs b/types/entities/config.rs deleted file mode 100644 index 25b1ef1..0000000 --- a/types/entities/config.rs +++ /dev/null @@ -1,34 +0,0 @@ -use serde::{Deserialize, Serialize}; -use serde_json::Value; -#[cfg(feature = "sqlx")] -use sqlx::FromRow; - -#[derive(Debug, Serialize, Deserialize)] -#[cfg_attr(feature = "sqlx", derive(FromRow))] -pub struct ConfigEntity { - pub key: String, - pub value: Option, -} - -impl ConfigEntity { - pub fn as_string(&self) -> Option { - let Some(v) = self.value.as_ref() else { - return None; - }; - Some(v.as_str().expect("value is not a string").to_string()) - } - - pub fn as_bool(&self) -> Option { - let Some(v) = self.value.as_ref() else { - return None; - }; - Some(v.as_bool().expect("value is not a boolean")) - } - - pub fn as_int(&self) -> Option { - let Some(v) = self.value.as_ref() else { - return None; - }; - Some(v.as_i64().expect("value is not a number")) - } -} diff --git a/types/entities/emoji.rs b/types/entities/emoji.rs deleted file mode 100644 index 2698607..0000000 --- a/types/entities/emoji.rs +++ /dev/null @@ -1,15 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::entities::User; - -#[derive(Debug, Deserialize, Serialize, Default, Clone)] -pub struct Emoji { - pub id: Option, - pub name: Option, - pub roles: Option>, - pub user: Option, - pub require_colons: Option, - pub managed: Option, - pub animated: Option, - pub available: Option, -} diff --git a/types/entities/guild.rs b/types/entities/guild.rs deleted file mode 100644 index 9b2abe7..0000000 --- a/types/entities/guild.rs +++ /dev/null @@ -1,117 +0,0 @@ -use chrono::{DateTime, Utc}; -use serde::{Deserialize, Serialize}; - -use crate::{ - entities::{Channel, Emoji, GuildTemplate, RoleObject, Sticker, User, VoiceState, Webhook}, - interfaces::WelcomeScreenObject, - utils::Snowflake, -}; - -/// See https://discord.com/developers/docs/resources/guild -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -pub struct Guild { - pub id: Snowflake, - pub name: String, - pub icon: Option, - pub icon_hash: Option, - pub splash: Option, - pub discovery_splash: Option, - pub owner: Option, - pub owner_id: Option, - pub permissions: Option, - pub afk_channel_id: Option, - pub afk_timeout: Option, - pub widget_enabled: Option, - pub widget_channel_id: Option, - pub widget_channel: Option, - pub verification_level: Option, - pub default_message_notifications: Option, - pub explicit_content_filter: Option, - pub roles: Vec, - pub emojis: Vec, - pub features: Vec, - pub application_id: Option, - pub system_channel_id: Option, - pub system_channel_flags: Option, - pub rules_channel_id: Option, - pub rules_channel: Option, - pub max_presences: Option, - pub max_members: Option, - pub vanity_url_code: Option, - pub description: Option, - pub banner: Option, - pub premium_tier: Option, - pub premium_subscription_count: Option, - pub preferred_locale: Option, - pub public_updates_channel_id: Option, - pub public_updates_channel: Option, - pub max_video_channel_users: Option, - pub max_stage_video_channel_users: Option, - pub approximate_member_count: Option, - pub approximate_presence_count: Option, - pub member_count: Option, - pub presence_count: Option, - pub welcome_screen: Option, - pub nsfw_level: u8, - pub nsfw: bool, - pub stickers: Option>, - pub premium_progress_bar_enabled: Option, - pub joined_at: String, - pub afk_channel: Option, - pub bans: Option>, - pub primary_category_id: Option, - pub large: Option, - pub channels: Option>, - pub template_id: Option, - pub template: Option, - pub invites: Option>, - pub voice_states: Option>, - pub webhooks: Option>, - pub mfa_level: Option, - pub region: Option, - pub unavailable: bool, - pub parent: Option, -} - -/// See https://docs.spacebar.chat/routes/#get-/guilds/-guild_id-/bans/-user- -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -pub struct GuildBan { - pub id: Snowflake, - pub user_id: Snowflake, - pub guild_id: Snowflake, - pub executor_id: Snowflake, - pub reason: Option, -} - -/// See https://docs.spacebar.chat/routes/#cmp--schemas-invite -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -pub struct GuildInvite { - pub code: String, - pub temporary: Option, - pub uses: Option, - pub max_uses: Option, - pub max_age: Option, - pub created_at: DateTime, - pub expires_at: Option>, - pub guild_id: String, - pub guild: Option, - pub channel_id: String, - pub channel: Option, - pub inviter_id: Option, - pub inviter: Option, - pub target_user_id: Option, - pub target_user: Option, - pub target_user_type: Option, - pub vanity_url: Option, -} - -#[derive(Serialize, Deserialize, Debug, Default)] -pub struct UnavailableGuild { - id: String, - unavailable: bool, -} - -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -pub struct GuildCreateResponse { - pub id: String, -} diff --git a/types/entities/guild_member.rs b/types/entities/guild_member.rs deleted file mode 100644 index 272baa7..0000000 --- a/types/entities/guild_member.rs +++ /dev/null @@ -1,19 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::entities::User; - -#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] -pub struct GuildMember { - pub user: Option, - pub nick: Option, - pub avatar: Option, - pub roles: Vec, - pub joined_at: String, - pub premium_since: Option, - pub deaf: bool, - pub mute: bool, - pub flags: i32, - pub pending: Option, - pub permissions: Option, - pub communication_disabled_until: Option, -} diff --git a/types/entities/integration.rs b/types/entities/integration.rs deleted file mode 100644 index 95b0de6..0000000 --- a/types/entities/integration.rs +++ /dev/null @@ -1,36 +0,0 @@ -use chrono::{DateTime, Utc}; -use serde::{Deserialize, Serialize}; - -use crate::{ - entities::{Application, User}, - utils::Snowflake, -}; - -#[derive(Default, Debug, Deserialize, Serialize, Clone)] -/// See https://discord.com/developers/docs/resources/guild#integration-object-integration-structure -pub struct Integration { - pub id: Snowflake, - pub name: String, - #[serde(rename = "type")] - pub integration_type: String, - pub enabled: bool, - pub syncing: Option, - pub role_id: Option, - pub enabled_emoticons: Option, - pub expire_behaviour: Option, - pub expire_grace_period: Option, - pub user: Option, - pub account: IntegrationAccount, - pub synced_at: Option>, - pub subscriber_count: Option, - pub revoked: Option, - pub application: Option, - pub scopes: Option>, -} - -#[derive(Default, Debug, Deserialize, Serialize, Clone)] -/// See https://discord.com/developers/docs/resources/guild#integration-account-object-integration-account-structure -pub struct IntegrationAccount { - pub id: String, - pub name: String, -} diff --git a/types/entities/message.rs b/types/entities/message.rs deleted file mode 100644 index 914affa..0000000 --- a/types/entities/message.rs +++ /dev/null @@ -1,185 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::{ - entities::{ - Application, Attachment, Channel, Emoji, GuildMember, RoleSubscriptionData, Sticker, - StickerItem, User, - }, - utils::Snowflake, -}; - -#[derive(Debug, Serialize, Deserialize, Default)] -pub struct Message { - id: Snowflake, - pub channel_id: Snowflake, - author: User, - content: String, - timestamp: String, - edited_timestamp: Option, - tts: bool, - mention_everyone: bool, - mentions: Vec, - mention_roles: Vec, - mention_channels: Option>, - pub attachments: Vec, - embeds: Vec, - reactions: Option>, - nonce: Option, - pinned: bool, - webhook_id: Option, - #[serde(rename = "type")] - message_type: i32, - activity: Option, - application: Option, - application_id: Option, - message_reference: Option, - flags: Option, - referenced_message: Option>, - interaction: Option, - thread: Option, - components: Option>, - sticker_items: Option>, - stickers: Option>, - position: Option, - role_subscription_data: Option, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct MessageReference { - pub message_id: Snowflake, - pub channel_id: Snowflake, - pub guild_id: Option, - pub fail_if_not_exists: Option, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct MessageInteraction { - pub id: Snowflake, - #[serde(rename = "type")] - pub interaction_type: u8, - pub name: String, - pub user: User, - pub member: Option, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct AllowedMention { - parse: Vec, - roles: Vec, - users: Vec, - replied_user: bool, -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "snake_case")] -pub enum AllowedMentionType { - Roles, - Users, - Everyone, -} - -#[derive(Debug, Serialize, Deserialize)] -struct ChannelMention { - id: Snowflake, - guild_id: Snowflake, - #[serde(rename = "type")] - channel_type: i32, - name: String, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct Embed { - title: Option, - #[serde(rename = "type")] - embed_type: Option, - description: Option, - url: Option, - timestamp: Option, - color: Option, - footer: Option, - image: Option, - thumbnail: Option, - video: Option, - provider: Option, - author: Option, - fields: Option>, -} - -#[derive(Debug, Serialize, Deserialize)] -struct EmbedFooter { - text: String, - icon_url: Option, - proxy_icon_url: Option, -} - -#[derive(Debug, Serialize, Deserialize)] -struct EmbedImage { - url: String, - proxy_url: String, - height: Option, - width: Option, -} - -#[derive(Debug, Serialize, Deserialize)] -struct EmbedThumbnail { - url: String, - proxy_url: Option, - height: Option, - width: Option, -} - -#[derive(Debug, Serialize, Deserialize)] -struct EmbedVideo { - url: Option, - proxy_url: Option, - height: Option, - width: Option, -} - -#[derive(Debug, Serialize, Deserialize)] -struct EmbedProvider { - name: Option, - url: Option, -} - -#[derive(Debug, Serialize, Deserialize)] -struct EmbedAuthor { - name: String, - url: Option, - icon_url: Option, - proxy_icon_url: Option, -} - -#[derive(Debug, Serialize, Deserialize)] - -struct EmbedField { - name: String, - value: String, - inline: Option, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct Reaction { - pub count: i32, - pub me: bool, - pub emoji: Emoji, -} - -#[derive(Debug, Serialize, Deserialize)] -pub enum Component { - ActionRow = 1, - Button = 2, - StringSelect = 3, - TextInput = 4, - UserSelect = 5, - RoleSelect = 6, - MentionableSelect = 7, - ChannelSelect = 8, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct MessageActivity { - #[serde(rename = "type")] - pub activity_type: i64, - pub party_id: Option, -} diff --git a/types/entities/mod.rs b/types/entities/mod.rs deleted file mode 100644 index 006aac1..0000000 --- a/types/entities/mod.rs +++ /dev/null @@ -1,37 +0,0 @@ -mod application; -mod attachment; -mod channel; -mod config; -mod emoji; -mod guild; -mod guild_member; -mod integration; -mod message; -mod role; -mod security_key; -mod sticker; -mod team; -mod template; -mod user; -mod user_settings; -mod voice_state; -mod webhook; - -pub use application::*; -pub use attachment::*; -pub use channel::*; -pub use config::*; -pub use emoji::*; -pub use guild::*; -pub use guild_member::*; -pub use integration::*; -pub use message::*; -pub use role::*; -pub use security_key::*; -pub use sticker::*; -pub use team::*; -pub use template::*; -pub use user::*; -pub use user_settings::*; -pub use voice_state::*; -pub use webhook::*; diff --git a/types/entities/role.rs b/types/entities/role.rs deleted file mode 100644 index f440775..0000000 --- a/types/entities/role.rs +++ /dev/null @@ -1,28 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::utils::Snowflake; - -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -/// See https://discord.com/developers/docs/topics/permissions#role-object -pub struct RoleObject { - pub id: Snowflake, - pub name: String, - pub color: f64, - pub hoist: bool, - pub icon: Option, - pub unicode_emoji: Option, - pub position: u16, - pub permissions: String, - pub managed: bool, - pub mentionable: bool, - // to:do add role tags https://discord.com/developers/docs/topics/permissions#role-object-role-tags-structure - //pub tags: Option -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct RoleSubscriptionData { - pub role_subscription_listing_id: Snowflake, - pub tier_name: String, - pub total_months_subscribed: u32, - pub is_renewal: bool, -} diff --git a/types/entities/security_key.rs b/types/entities/security_key.rs deleted file mode 100644 index 9eaa378..0000000 --- a/types/entities/security_key.rs +++ /dev/null @@ -1,26 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::utils::Snowflake; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct SecurityKey { - pub id: String, - pub user_id: String, - pub key_id: String, - pub public_key: String, - pub counter: u64, - pub name: String, -} - -impl Default for SecurityKey { - fn default() -> Self { - Self { - id: Snowflake::generate().to_string(), - user_id: String::new(), - key_id: String::new(), - public_key: String::new(), - counter: 0, - name: String::new(), - } - } -} diff --git a/types/entities/sticker.rs b/types/entities/sticker.rs deleted file mode 100644 index c3a8950..0000000 --- a/types/entities/sticker.rs +++ /dev/null @@ -1,27 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::{entities::User, utils::Snowflake}; - -#[derive(Debug, Serialize, Deserialize, Clone)] -pub struct Sticker { - pub id: Snowflake, - pub pack_id: Option, - pub name: String, - pub description: Option, - pub tags: String, - pub asset: Option, - #[serde(rename = "type")] - pub sticker_type: u8, - pub format_type: u8, - pub available: Option, - pub guild_id: Option, - pub user: Option, - pub sort_value: Option, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct StickerItem { - pub id: Snowflake, - pub name: String, - pub format_type: u8, -} diff --git a/types/entities/team.rs b/types/entities/team.rs deleted file mode 100644 index 5bcf863..0000000 --- a/types/entities/team.rs +++ /dev/null @@ -1,20 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::entities::User; - -#[derive(Debug, Deserialize, Serialize, Clone)] -pub struct Team { - pub icon: Option, - pub id: u64, - pub members: Vec, - pub name: String, - pub owner_user_id: u64, -} - -#[derive(Debug, Deserialize, Serialize, Clone)] -pub struct TeamMember { - pub membership_state: u8, - pub permissions: Vec, - pub team_id: u64, - pub user: User, -} diff --git a/types/entities/template.rs b/types/entities/template.rs deleted file mode 100644 index d640320..0000000 --- a/types/entities/template.rs +++ /dev/null @@ -1,24 +0,0 @@ -use chrono::{DateTime, Utc}; -use serde::{Deserialize, Serialize}; - -use crate::{ - entities::{Guild, User}, - utils::Snowflake, -}; - -/// See https://docs.spacebar.chat/routes/#cmp--schemas-template -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -pub struct GuildTemplate { - pub code: String, - pub name: String, - pub description: Option, - pub usage_count: Option, - pub creator_id: Snowflake, - pub creator: User, - pub created_at: DateTime, - pub updated_at: DateTime, - pub source_guild_id: String, - pub source_guild: Vec, // Unsure how a {recursive: Guild} looks like, might be a Vec? - pub serialized_source_guild: Vec, - id: Snowflake, -} diff --git a/types/entities/user.rs b/types/entities/user.rs deleted file mode 100644 index ce3563c..0000000 --- a/types/entities/user.rs +++ /dev/null @@ -1,112 +0,0 @@ -use chrono::{DateTime, Utc}; -use serde::{Deserialize, Serialize}; -use serde_json::{Map, Value}; -#[cfg(feature = "sqlx")] -use sqlx::{FromRow, Type}; - -use crate::{ - errors::Error, - utils::Snowflake, //util::{email::adjust_email, entities::user_setting::UserSettings}, -}; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] -#[cfg_attr(feature = "sqlx", derive(Type))] -pub struct UserData { - pub valid_tokens_since: DateTime, - pub hash: Option, -} - -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -pub struct User { - pub id: String, - username: String, - discriminator: String, - avatar: Option, - bot: bool, - system: Option, - mfa_enabled: Option, - accent_color: Option, - locale: Option, - verified: Option, - email: Option, - flags: String, - premium_since: Option, - premium_type: i8, - pronouns: Option, - public_flags: Option, - banner: Option, - bio: String, - theme_colors: Option>, - phone: Option, - nsfw_allowed: bool, - premium: bool, - purchased_flags: i32, - premium_usage_flags: i32, - disabled: Option, -} - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct User { - pub id: Snowflake, - pub username: String, - pub discriminator: String, - pub avatar: Option, - pub accent_color: Option, - pub banner: Option, - pub theme_colors: Option>, - pub pronouns: Option, - pub bot: bool, - pub bio: String, - pub premium_type: u8, - pub premium_since: Option>, - pub public_flags: u16, -} - -impl From for PublicUser { - fn from(value: User) -> Self { - Self { - id: value.id, - username: value.username, - discriminator: value.discriminator, - avatar: value.avatar, - accent_color: value.accent_color, - banner: value.banner, - theme_colors: value.theme_colors, - pronouns: value.pronouns, - bot: value.bot, - bio: value.bio, - premium_type: value.premium_type, - premium_since: value.premium_since, - public_flags: value.public_flags, - } - } -} - -const CUSTOM_USER_FLAG_OFFSET: u64 = 1 << 32; - -bitflags::bitflags! { - #[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] - #[cfg_attr(feature = "sqlx", derive(Type))] - pub struct UserFlags: u64 { - const DISCORD_EMPLOYEE = 1 << 0; - const PARTNERED_SERVER_OWNER = 1 << 1; - const HYPESQUAD_EVENTS = 1 << 2; - const BUGHUNTER_LEVEL_1 =1 << 3; - const MFA_SMS = 1 << 4; - const PREMIUM_PROMO_DISMISSED = 1 << 5; - const HOUSE_BRAVERY = 1 << 6; - const HOUSE_BRILLIANCE = 1 << 7; - const HOUSE_BALANCE = 1 << 8; - const EARLY_SUPPORTER = 1 << 9; - const TEAM_USER = 1 << 10; - const TRUST_AND_SAFETY = 1 << 11; - const SYSTEM = 1 << 12; - const HAS_UNREAD_URGENT_MESSAGES = 1 << 13; - const BUGHUNTER_LEVEL_2 = 1 << 14; - const UNDERAGE_DELETED = 1 << 15; - const VERIFIED_BOT = 1 << 16; - const EARLY_VERIFIED_BOT_DEVELOPER = 1 << 17; - const CERTIFIED_MODERATOR = 1 << 18; - const BOT_HTTP_INTERACTIONS = 1 << 19; - } -} diff --git a/types/entities/user_settings.rs b/types/entities/user_settings.rs deleted file mode 100644 index c4adaee..0000000 --- a/types/entities/user_settings.rs +++ /dev/null @@ -1,133 +0,0 @@ -use chrono::{serde::ts_milliseconds_option, Utc}; -use serde::{Deserialize, Serialize}; - -use crate::utils::Snowflake; - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] -#[serde(rename_all = "lowercase")] -pub enum UserStatus { - #[default] - Online, - Offline, - Dnd, - Idle, - Invisible, -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] -#[serde(rename_all = "lowercase")] -pub enum UserTheme { - #[default] - Dark, - Light, -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct UserSettings { - #[serde(skip_serializing)] - pub index: String, // Database relevance only - pub afk_timeout: u16, - pub allow_accessibility_detection: bool, - pub animate_emoji: bool, - pub animate_stickers: u8, - pub contact_sync_enabled: bool, - pub convert_emoticons: bool, - pub custom_status: Option, - pub default_guilds_restricted: bool, - pub detect_platform_accounts: bool, - pub developer_mode: bool, - pub disable_games_tab: bool, - pub enable_tts_command: bool, - pub explicit_content_filter: u8, - pub friend_source_flags: FriendSourceFlags, - pub gateway_connected: bool, - pub gif_auto_play: bool, - pub guild_folders: Vec, - pub guild_positions: Vec, - pub inline_attachment_media: bool, - pub inline_embed_media: bool, - pub locale: String, - pub message_display_compact: bool, - pub native_phone_integration_enabled: bool, - pub render_embeds: bool, - pub render_reactions: bool, - pub restricted_guilds: Vec, - pub show_current_game: bool, - pub status: UserStatus, - pub stream_notifications_enabled: bool, - pub theme: UserTheme, - pub timezone_offset: i16, -} - -impl Default for UserSettings { - fn default() -> Self { - Self { - index: Snowflake::generate().to_string(), - afk_timeout: 3600, - allow_accessibility_detection: true, - animate_emoji: true, - animate_stickers: 0, - contact_sync_enabled: false, - convert_emoticons: false, - custom_status: None, - default_guilds_restricted: false, - detect_platform_accounts: false, - developer_mode: true, - disable_games_tab: true, - enable_tts_command: false, - explicit_content_filter: 0, - friend_source_flags: FriendSourceFlags::default(), - gateway_connected: false, - gif_auto_play: false, - guild_folders: Vec::new(), - guild_positions: Vec::new(), - inline_attachment_media: true, - inline_embed_media: true, - locale: "en-US".to_string(), - message_display_compact: false, - native_phone_integration_enabled: true, - render_embeds: true, - render_reactions: true, - restricted_guilds: Vec::new(), - show_current_game: true, - status: UserStatus::Online, - stream_notifications_enabled: false, - theme: UserTheme::Dark, - timezone_offset: 0, - } - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct CustomStatus { - pub emoji_id: Option, - pub emoji_name: Option, - #[serde(with = "ts_milliseconds_option")] - pub expires_at: Option>, - pub text: Option, -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct FriendSourceFlags { - pub all: bool, -} - -impl Default for FriendSourceFlags { - fn default() -> Self { - Self { all: true } - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct GuildFolder { - pub color: u32, - pub guild_ids: Vec, - pub id: u16, - pub name: String, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct LoginResult { - pub token: String, - pub settings: UserSettings, -} diff --git a/types/entities/voice_state.rs b/types/entities/voice_state.rs deleted file mode 100644 index 79ee1cc..0000000 --- a/types/entities/voice_state.rs +++ /dev/null @@ -1,30 +0,0 @@ -use chrono::{DateTime, Utc}; -use serde::{Deserialize, Serialize}; - -use crate::{ - entities::{Channel, Guild, GuildMember, User}, - utils::Snowflake, -}; - -/// See https://docs.spacebar.chat/routes/#cmp--schemas-voicestate -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -pub struct VoiceState { - pub guild_id: Snowflake, - pub guild: Option, - pub channel_id: Snowflake, - pub channel: Option, - pub user_id: Snowflake, - pub user: Option, - pub member: Option, - pub session_id: Snowflake, - pub token: String, - pub deaf: bool, - pub mute: bool, - pub self_deaf: bool, - pub self_mute: bool, - pub self_stream: Option, - pub self_video: bool, - pub suppress: bool, - pub request_to_speak_timestamp: Option>, - pub id: Snowflake, -} diff --git a/types/entities/webhook.rs b/types/entities/webhook.rs deleted file mode 100644 index e690a72..0000000 --- a/types/entities/webhook.rs +++ /dev/null @@ -1,32 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::{ - entities::{Application, Channel, Guild, User}, - utils::Snowflake, -}; - -/// See https://docs.spacebar.chat/routes/#cmp--schemas-webhook -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -pub struct Webhook { - #[serde(rename = "type")] - pub webhook_type: i32, - pub name: String, - pub avatar: String, - pub token: String, - pub guild_id: Snowflake, - #[serde(skip_serializing_if = "Option::is_none")] - pub guild: Option, - pub channel_id: Snowflake, - #[serde(skip_serializing_if = "Option::is_none")] - pub channel: Option, - pub application_id: Snowflake, - #[serde(skip_serializing_if = "Option::is_none")] - pub application: Option, - pub user_id: Snowflake, - #[serde(skip_serializing_if = "Option::is_none")] - pub user: Option, - pub source_guild_id: Snowflake, - #[serde(skip_serializing_if = "Option::is_none")] - pub source_guild: Option, - pub id: Snowflake, -} diff --git a/types/errors.rs b/types/errors.rs deleted file mode 100644 index 63f6ceb..0000000 --- a/types/errors.rs +++ /dev/null @@ -1,54 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, thiserror::Error)] -pub enum Error { - #[cfg(feature = "sqlx")] - #[error("SQLX error: {0}")] - SQLX(#[from] sqlx::Error), - - #[error("serde: {0}")] - Serde(#[from] serde_json::Error), - - #[error(transparent)] - IO(#[from] std::io::Error), - - #[error(transparent)] - FieldFormat(#[from] FieldFormatError), -} - -#[derive(Debug, PartialEq, Eq, thiserror::Error)] -pub enum FieldFormatError { - #[error("Password must be between 1 and 72 characters.")] - PasswordError, - #[error("Username must be between 2 and 32 characters.")] - UsernameError, - #[error("Consent must be 'true' to register.")] - ConsentError, - #[error("The provided email address is in an invalid format.")] - EmailError, -} - -#[derive(Serialize, Deserialize, Debug)] -pub struct ErrorResponse { - pub code: i32, - pub message: String, - pub errors: IntermittentError, -} - -#[derive(Serialize, Deserialize, Debug)] -pub struct IntermittentError { - #[serde(flatten)] - pub errors: std::collections::HashMap, -} - -#[derive(Serialize, Deserialize, Debug, Default)] -pub struct ErrorField { - #[serde(default)] - pub _errors: Vec, -} - -#[derive(Serialize, Deserialize, Debug)] -pub struct APIError { - pub message: String, - pub code: String, -} diff --git a/types/events/channel.rs b/types/events/channel.rs deleted file mode 100644 index 19e4238..0000000 --- a/types/events/channel.rs +++ /dev/null @@ -1,41 +0,0 @@ -use chrono::{DateTime, Utc}; -use serde::{Deserialize, Serialize}; -use crate::entities::Channel; -use crate::events::WebSocketEvent; - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#channel-pins-update -pub struct ChannelPinsUpdate { - pub guild_id: Option, - pub channel_id: String, - pub last_pin_timestamp: Option>, -} - -impl WebSocketEvent for ChannelPinsUpdate {} - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#channel-create -/// Not directly serialized, as the inner payload is a channel object -pub struct ChannelCreate { - pub channel: Channel, -} - -impl WebSocketEvent for ChannelCreate {} - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#channel-update -/// Not directly serialized, as the inner payload is a channel object -pub struct ChannelUpdate { - pub channel: Channel, -} - -impl WebSocketEvent for ChannelUpdate {} - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#channel-delete -/// Not directly serialized, as the inner payload is a channel object -pub struct ChannelDelete { - pub channel: Channel, -} - -impl WebSocketEvent for ChannelDelete {} \ No newline at end of file diff --git a/types/events/guild.rs b/types/events/guild.rs deleted file mode 100644 index 3b17861..0000000 --- a/types/events/guild.rs +++ /dev/null @@ -1,41 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::entities::{Guild, UnavailableGuild, User}; -use crate::events::WebSocketEvent; - -#[derive(Debug, Deserialize, Serialize, Default)] -/// See https://discord.com/developers/docs/topics/gateway-events#guild-create -/// This one is particularly painful, it can be a Guild object with extra field or an unavailbile guild object -pub struct GuildCreate { - pub d: GuildCreateDataOption, -} - -#[derive(Debug, Deserialize, Serialize)] -pub enum GuildCreateDataOption { - UnavailableGuild(UnavailableGuild), - Guild(Guild), -} - -impl Default for GuildCreateDataOption { - fn default() -> Self { - GuildCreateDataOption::UnavailableGuild(UnavailableGuild::default()) - } -} -impl WebSocketEvent for GuildCreate {} - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#guild-ban-add-guild-ban-add-event-fields -pub struct GuildBanAdd { - pub guild_id: String, - pub user: User, -} - -impl WebSocketEvent for GuildBanAdd {} - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#guild-ban-remove -pub struct GuildBanRemove { - pub guild_id: String, - pub user: User, -} - -impl WebSocketEvent for GuildBanRemove {} \ No newline at end of file diff --git a/types/events/heartbeat.rs b/types/events/heartbeat.rs deleted file mode 100644 index cc73239..0000000 --- a/types/events/heartbeat.rs +++ /dev/null @@ -1,17 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::events::WebSocketEvent; - -#[derive(Debug, Default, Deserialize, Serialize)] -pub struct GatewayHeartbeat { - pub op: u8, - pub d: Option, -} - -impl WebSocketEvent for GatewayHeartbeat {} - -#[derive(Debug, Default, Deserialize, Serialize)] -pub struct GatewayHeartbeatAck { - pub op: i32, -} - -impl WebSocketEvent for GatewayHeartbeatAck {} \ No newline at end of file diff --git a/types/events/hello.rs b/types/events/hello.rs deleted file mode 100644 index cb63dae..0000000 --- a/types/events/hello.rs +++ /dev/null @@ -1,17 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::events::WebSocketEvent; - -#[derive(Debug, Default, Deserialize, Serialize)] -pub struct GatewayHello { - pub op: i32, - pub d: HelloData, -} - -impl WebSocketEvent for GatewayHello {} - -#[derive(Debug, Default, Deserialize, Serialize)] -pub struct HelloData { - pub heartbeat_interval: u128, -} - -impl WebSocketEvent for HelloData {} \ No newline at end of file diff --git a/types/events/identify.rs b/types/events/identify.rs deleted file mode 100644 index 7443631..0000000 --- a/types/events/identify.rs +++ /dev/null @@ -1,22 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::events::{PresenceUpdate, WebSocketEvent}; - -#[derive(Debug, Deserialize, Serialize, Default)] -pub struct GatewayIdentifyPayload { - pub token: String, - pub properties: GatewayIdentifyConnectionProps, - pub compress: Option, - pub large_threshold: Option, //default: 50 - pub shard: Option>, - pub presence: Option, - pub intents: i32, -} - -impl WebSocketEvent for GatewayIdentifyPayload {} - -#[derive(Debug, Deserialize, Serialize, Default)] -pub struct GatewayIdentifyConnectionProps { - pub os: String, - pub browser: String, - pub device: String, -} \ No newline at end of file diff --git a/types/events/message.rs b/types/events/message.rs deleted file mode 100644 index edaaa4b..0000000 --- a/types/events/message.rs +++ /dev/null @@ -1,101 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::{ - entities::{Emoji, GuildMember, Message, User}, - utils::Snowflake, -}; - -use super::WebSocketEvent; - -#[derive(Debug, Deserialize, Serialize, Default)] -pub struct TypingStartEvent { - pub channel_id: String, - pub guild_id: Option, - pub user_id: String, - pub timestamp: i64, - pub member: Option, -} - -impl WebSocketEvent for TypingStartEvent {} - -#[derive(Debug, Serialize, Deserialize, Default)] -pub struct MessageCreate { - #[serde(flatten)] - message: Message, - guild_id: Option, - member: Option, - mentions: Vec<(User, GuildMember)>, // Not sure if this is correct: https://discord.com/developers/docs/topics/gateway-events#message-create -} - -impl WebSocketEvent for MessageCreate {} - -#[derive(Debug, Serialize, Deserialize, Default)] -pub struct MessageUpdate { - #[serde(flatten)] - message: Message, - guild_id: Option, - member: Option, - mentions: Vec<(User, GuildMember)>, // Not sure if this is correct: https://discord.com/developers/docs/topics/gateway-events#message-create -} - -impl WebSocketEvent for MessageUpdate {} - -#[derive(Debug, Serialize, Deserialize, Default)] -pub struct MessageDelete { - id: String, - channel_id: String, - guild_id: Option, -} - -impl WebSocketEvent for MessageDelete {} - -#[derive(Debug, Serialize, Deserialize, Default)] -pub struct MessageDeleteBulk { - ids: Vec, - channel_id: String, - guild_id: Option, -} - -impl WebSocketEvent for MessageDeleteBulk {} - -#[derive(Debug, Serialize, Deserialize, Default)] -pub struct MessageReactionAdd { - user_id: String, - channel_id: String, - message_id: String, - guild_id: Option, - member: Option, - emoji: Emoji, -} - -impl WebSocketEvent for MessageReactionAdd {} - -#[derive(Debug, Serialize, Deserialize, Default)] -pub struct MessageReactionRemove { - user_id: String, - channel_id: String, - message_id: String, - guild_id: Option, - emoji: Emoji, -} - -impl WebSocketEvent for MessageReactionRemove {} - -#[derive(Debug, Serialize, Deserialize, Default)] -pub struct MessageReactionRemoveAll { - channel_id: String, - message_id: String, - guild_id: Option, -} - -impl WebSocketEvent for MessageReactionRemoveAll {} - -#[derive(Debug, Serialize, Deserialize, Default)] -pub struct MessageReactionRemoveEmoji { - channel_id: String, - message_id: String, - guild_id: Option, - emoji: Emoji, -} - -impl WebSocketEvent for MessageReactionRemoveEmoji {} diff --git a/types/events/mod.rs b/types/events/mod.rs deleted file mode 100644 index 418cd31..0000000 --- a/types/events/mod.rs +++ /dev/null @@ -1,41 +0,0 @@ -use serde::{Deserialize, Serialize}; - -mod channel; -mod guild; -mod heartbeat; -mod hello; -mod identify; -mod message; -mod presence; -mod ready; -mod request_members; -mod resume; -mod thread; -mod user; -mod voice_status; - -pub use channel::*; -pub use guild::*; -pub use heartbeat::*; -pub use hello::*; -pub use identify::*; -pub use message::*; -pub use presence::*; -pub use ready::*; -pub use request_members::*; -pub use resume::*; -pub use thread::*; -pub use user::*; -pub use voice_status::*; - -pub trait WebSocketEvent {} - -#[derive(Debug, Default, Deserialize, Serialize)] -pub struct GatewayPayload { - pub op: u8, - pub d: Option, - pub s: Option, - pub t: Option, -} - -impl WebSocketEvent for GatewayPayload {} diff --git a/types/events/presence.rs b/types/events/presence.rs deleted file mode 100644 index c62e6ae..0000000 --- a/types/events/presence.rs +++ /dev/null @@ -1,24 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::entities::User; -use crate::events::WebSocketEvent; -use crate::interfaces::Activity; - -#[derive(Debug, Deserialize, Serialize, Default, Clone)] -/// See https://discord.com/developers/docs/topics/gateway-events#presence-update-presence-update-event-fields -pub struct PresenceUpdate { - pub user: User, - pub guild_id: String, - pub status: String, - pub activities: Vec, - pub client_status: ClientStatusObject, -} - -#[derive(Debug, Deserialize, Serialize, Default, Clone)] -/// See https://discord.com/developers/docs/topics/gateway-events#client-status-object -pub struct ClientStatusObject { - pub desktop: Option, - pub mobile: Option, - pub web: Option, -} - -impl WebSocketEvent for PresenceUpdate {} \ No newline at end of file diff --git a/types/events/ready.rs b/types/events/ready.rs deleted file mode 100644 index 3d42f6e..0000000 --- a/types/events/ready.rs +++ /dev/null @@ -1,15 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::entities::{UnavailableGuild, User}; -use crate::events::WebSocketEvent; - -#[derive(Debug, Deserialize, Serialize, Default)] -pub struct GatewayReady { - pub v: u8, - pub user: User, - pub guilds: Vec, - pub session_id: String, - pub resume_gateway_url: Option, - pub shard: Option<(u64, u64)>, -} - -impl WebSocketEvent for GatewayReady {} \ No newline at end of file diff --git a/types/events/request_members.rs b/types/events/request_members.rs deleted file mode 100644 index 192fe71..0000000 --- a/types/events/request_members.rs +++ /dev/null @@ -1,15 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::events::WebSocketEvent; - -#[derive(Debug, Deserialize, Serialize, Default)] -/// See https://discord.com/developers/docs/topics/gateway-events#request-guild-members-request-guild-members-structure -pub struct GatewayRequestGuildMembers { - pub guild_id: String, - pub query: Option, - pub limit: u64, - pub presence: Option, - pub user_ids: Option, - pub nonce: Option, -} - -impl WebSocketEvent for GatewayRequestGuildMembers {} \ No newline at end of file diff --git a/types/events/resume.rs b/types/events/resume.rs deleted file mode 100644 index abdc5d6..0000000 --- a/types/events/resume.rs +++ /dev/null @@ -1,11 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::events::WebSocketEvent; - -#[derive(Debug, Deserialize, Serialize, Default)] -pub struct GatewayResume { - pub token: String, - pub session_id: String, - pub seq: String, -} - -impl WebSocketEvent for GatewayResume {} \ No newline at end of file diff --git a/types/events/thread.rs b/types/events/thread.rs deleted file mode 100644 index 214ae8b..0000000 --- a/types/events/thread.rs +++ /dev/null @@ -1,82 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::entities::{Channel, GuildMember, ThreadMember}; -use crate::events::WebSocketEvent; - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#thread-create -/// Not directly serialized, as the inner payload is a channel object -pub struct ThreadCreate { - pub thread: Channel, -} - -impl WebSocketEvent for ThreadCreate {} - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#thread-update -/// Not directly serialized, as the inner payload is a channel object -pub struct ThreadUpdate { - pub thread: Channel, -} - -impl WebSocketEvent for ThreadUpdate {} - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#thread-delete -/// Not directly serialized, as the inner payload is a channel object -pub struct ThreadDelete { - pub thread: Channel, -} - -impl WebSocketEvent for ThreadDelete {} - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#thread-list-sync -pub struct ThreadListSync { - pub guild_id: String, - pub channel_ids: Option>, - pub threads: Vec, - pub members: Vec, -} - -impl WebSocketEvent for ThreadListSync {} - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#thread-member-update -/// The inner payload is a thread member object with an extra field. -/// The extra field is a bit painful, because we can't just serialize a thread member object -pub struct ThreadMemberUpdate { - pub id: Option, - pub user_id: Option, - pub join_timestamp: Option, - pub flags: Option, - pub member: Option, - pub guild_id: String, -} - -impl ThreadMemberUpdate { - /// Convert self to a thread member, losing the added guild_id field - pub fn to_thread_member(self) -> ThreadMember { - ThreadMember { - id: self.id, - user_id: self.user_id, - join_timestamp: self.join_timestamp.clone(), - flags: self.flags, - member: self.member, - } - } -} - -impl WebSocketEvent for ThreadMemberUpdate {} - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#thread-members-update -pub struct ThreadMembersUpdate { - pub id: String, - pub guild_id: String, - /// Capped at 50 - pub member_count: u8, - pub added_members: Option>, - pub removed_members: Option>, -} - -impl WebSocketEvent for ThreadMembersUpdate {} \ No newline at end of file diff --git a/types/events/user.rs b/types/events/user.rs deleted file mode 100644 index 385bb43..0000000 --- a/types/events/user.rs +++ /dev/null @@ -1,12 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::entities::User; -use crate::events::WebSocketEvent; - -#[derive(Debug, Default, Deserialize, Serialize)] -/// See https://discord.com/developers/docs/topics/gateway-events#user-update -/// Not directly serialized, as the inner payload is the user object -pub struct UserUpdate { - pub user: User, -} - -impl WebSocketEvent for UserUpdate {} \ No newline at end of file diff --git a/types/events/voice_status.rs b/types/events/voice_status.rs deleted file mode 100644 index 9e5b968..0000000 --- a/types/events/voice_status.rs +++ /dev/null @@ -1,13 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::events::WebSocketEvent; - -#[derive(Debug, Deserialize, Serialize, Default)] -/// See https://discord.com/developers/docs/topics/gateway-events#update-voice-state-gateway-voice-state-update-structure -pub struct GatewayVoiceStateUpdate { - pub guild_id: String, - pub channel_id: Option, - pub self_mute: bool, - pub self_deaf: bool, -} - -impl WebSocketEvent for GatewayVoiceStateUpdate {} \ No newline at end of file diff --git a/types/interfaces/activity.rs b/types/interfaces/activity.rs deleted file mode 100644 index fd3e4be..0000000 --- a/types/interfaces/activity.rs +++ /dev/null @@ -1,57 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::entities::Emoji; - -#[derive(Debug, Deserialize, Serialize, Clone)] -pub struct Activity { - name: String, - #[serde(rename = "type")] - activity_type: i32, - url: Option, - created_at: i64, - timestamps: Option, - application_id: Option, - details: Option, - state: Option, - emoji: Option, - party: Option, - assets: Option, - secrets: Option, - instance: Option, - flags: Option, - buttons: Option>, -} - - -#[derive(Debug, Deserialize, Serialize, Clone)] -struct ActivityTimestamps { - start: Option, - end: Option, -} - -#[derive(Debug, Deserialize, Serialize, Clone)] -struct ActivityParty { - id: Option, - size: Option>, -} - -#[derive(Debug, Deserialize, Serialize, Clone)] -struct ActivityAssets { - large_image: Option, - large_text: Option, - small_image: Option, - small_text: Option, -} - -#[derive(Debug, Deserialize, Serialize, Clone)] -struct ActivitySecrets { - join: Option, - spectate: Option, - #[serde(rename = "match")] - match_string: Option, -} - -#[derive(Debug, Deserialize, Serialize, Clone)] -struct ActivityButton { - label: String, - url: String, -} \ No newline at end of file diff --git a/types/interfaces/connected_account.rs b/types/interfaces/connected_account.rs deleted file mode 100644 index e69de29..0000000 diff --git a/types/interfaces/guild_welcome_screen.rs b/types/interfaces/guild_welcome_screen.rs deleted file mode 100644 index af645d3..0000000 --- a/types/interfaces/guild_welcome_screen.rs +++ /dev/null @@ -1,17 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::utils::Snowflake; - -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -pub struct WelcomeScreenObject { - pub enabled: bool, - pub description: Option, - pub welcome_channels: Vec, -} - -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -pub struct WelcomeScreenChannel { - pub channel_id: Snowflake, - pub description: String, - pub emoji_id: Option, - pub emoji_name: Option, -} \ No newline at end of file diff --git a/types/interfaces/interaction.rs b/types/interfaces/interaction.rs deleted file mode 100644 index 76b18e4..0000000 --- a/types/interfaces/interaction.rs +++ /dev/null @@ -1,39 +0,0 @@ -use serde::{Deserialize, Serialize}; -use serde_json::Value; -use crate::entities::{AllowedMention, Embed}; -use crate::utils::Snowflake; - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub struct Interaction { - pub id: Snowflake, - pub r#type: InteractionType, - pub data: Value, - pub guild_id: Snowflake, - pub channel_id: Snowflake, - pub member_id: Snowflake, - pub token: String, - pub version: i32, -} - -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] -pub enum InteractionType { - SelfCommand = 0, - Ping = 1, - ApplicationCommand = 2 -} - -pub enum InteractionResponseType { - SelfCommandResponse = 0, - Pong = 1, - Acknowledge = 2, - ChannelMessage = 3, - ChannelMessageWithSource = 4, - AcknowledgeWithSource = 5, -} - -pub struct InteractionApplicationCommandCallbackData { - pub tts: bool, - pub content: String, - pub embeds: Vec, - pub allowed_mentions: AllowedMention -} diff --git a/types/interfaces/mod.rs b/types/interfaces/mod.rs deleted file mode 100644 index 6e0a7df..0000000 --- a/types/interfaces/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -mod activity; -mod connected_account; -mod guild_welcome_screen; -mod interaction; -mod status; - -pub use activity::*; -pub use connected_account::*; -pub use guild_welcome_screen::*; -pub use interaction::*; -pub use status::*; \ No newline at end of file diff --git a/types/interfaces/status.rs b/types/interfaces/status.rs deleted file mode 100644 index 105dd87..0000000 --- a/types/interfaces/status.rs +++ /dev/null @@ -1,9 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Deserialize, Serialize, Default, Clone)] -/// See https://discord.com/developers/docs/topics/gateway-events#client-status-object -pub struct ClientStatusObject { - pub desktop: Option, - pub mobile: Option, - pub web: Option, -} \ No newline at end of file diff --git a/types/lib.rs b/types/lib.rs deleted file mode 100644 index a3b0671..0000000 --- a/types/lib.rs +++ /dev/null @@ -1,7 +0,0 @@ -pub mod config; // Maybe feature lock this for backend/web usage only? web would only need it in the case of the admin panel -pub mod entities; -pub mod errors; -pub mod events; -pub mod utils; -pub mod interfaces; -pub mod schema; diff --git a/types/schema/apierror.rs b/types/schema/apierror.rs deleted file mode 100644 index 95e72a5..0000000 --- a/types/schema/apierror.rs +++ /dev/null @@ -1,72 +0,0 @@ -#[cfg(feature = "poem")] -use poem::{http::StatusCode, IntoResponse, Response}; -use serde_json::{json, Value}; - -#[derive(Debug, thiserror::Error)] -pub enum APIError { - #[error(transparent)] - Auth(#[from] AuthError), -} - -impl APIError { - pub fn error_payload(&self) -> Value { - match self { - APIError::Auth(auth_err) => auth_err.error_payload(), - } - } -} - -#[derive(Debug, thiserror::Error)] -pub enum AuthError { - #[error("INVALID_LOGIN")] - InvalidLogin, - #[error("INVALID_CAPTCHA")] - InvalidCaptcha, -} - -impl AuthError { - pub fn error_code(&self) -> &str { - match self { - AuthError::InvalidLogin => "INVALID_LOGIN", - AuthError::InvalidCaptcha => "INVALID_CATPCA", - } - } - - pub fn error_payload(&self) -> Value { - match self { - AuthError::InvalidLogin => json!({ - "login": { - "message": "auth:login.INVALID_LOGIN", - "code": self.error_code() - } - }), - AuthError::InvalidCaptcha => json!([json!({ - "captcha_key": "TODO", - "captcha_sitekey": "TODO", - "captcha_service": "TODO" - })]), - } - } -} - -#[cfg(feature = "poem")] -impl poem::error::ResponseError for APIError { - fn status(&self) -> StatusCode { - match self { - APIError::Auth(auth_err) => match auth_err { - AuthError::InvalidLogin => StatusCode::UNAUTHORIZED, - AuthError::InvalidCaptcha => StatusCode::BAD_REQUEST, - }, - } - } - - fn as_response(&self) -> Response - where - Self: std::error::Error + Send + Sync + 'static, - { - Response::builder() - .status(self.status()) - .body(self.error_payload().to_string()) - .into_response() - } -} diff --git a/types/schema/auth.rs b/types/schema/auth.rs deleted file mode 100644 index 073d8d4..0000000 --- a/types/schema/auth.rs +++ /dev/null @@ -1,240 +0,0 @@ -use crate::errors::FieldFormatError; -use regex::Regex; -use serde::{Deserialize, Serialize}; - -/** -A struct that represents a well-formed email address. - */ -#[derive(Clone, PartialEq, Eq, Debug)] -pub struct AuthEmail { - pub email: String, -} - -impl AuthEmail { - /** - Returns a new [`Result`]. - ## Arguments - The email address you want to validate. - ## Errors - You will receive a [`FieldFormatError`], if: - - The email address is not in a valid format. - - */ - pub fn new(email: String) -> Result { - let regex = Regex::new(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$").unwrap(); - if !regex.is_match(email.as_str()) { - return Err(FieldFormatError::EmailError); - } - Ok(AuthEmail { email }) - } -} - -/** -A struct that represents a well-formed username. -## Arguments -Please use new() to create a new instance of this struct. -## Errors -You will receive a [`FieldFormatError`], if: -- The username is not between 2 and 32 characters. - */ -#[derive(Clone, PartialEq, Eq, Debug)] -pub struct AuthUsername { - pub username: String, -} - -impl AuthUsername { - /** - Returns a new [`Result`]. - ## Arguments - The username you want to validate. - ## Errors - You will receive a [`FieldFormatError`], if: - - The username is not between 2 and 32 characters. - */ - pub fn new(username: String) -> Result { - if username.len() < 2 || username.len() > 32 { - Err(FieldFormatError::UsernameError) - } else { - Ok(AuthUsername { username }) - } - } -} - -/** -A struct that represents a well-formed password. -## Arguments -Please use new() to create a new instance of this struct. -## Errors -You will receive a [`FieldFormatError`], if: -- The password is not between 1 and 72 characters. - */ -#[derive(Clone, PartialEq, Eq, Debug)] -pub struct AuthPassword { - pub password: String, -} - -impl AuthPassword { - /** - Returns a new [`Result`]. - ## Arguments - The password you want to validate. - ## Errors - You will receive a [`FieldFormatError`], if: - - The password is not between 1 and 72 characters. - */ - pub fn new(password: String) -> Result { - if password.is_empty() || password.len() > 72 { - Err(FieldFormatError::PasswordError) - } else { - Ok(AuthPassword { password }) - } - } -} - -/** -A struct that represents a well-formed register request. -## Arguments -Please use new() to create a new instance of this struct. -## Errors -You will receive a [`FieldFormatError`], if: -- The username is not between 2 and 32 characters. -- The password is not between 1 and 72 characters. - */ - -#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub struct RegisterSchema { - username: String, - password: Option, - consent: bool, - email: Option, - fingerprint: Option, - invite: Option, - date_of_birth: Option, - gift_code_sku_id: Option, - captcha_key: Option, - promotional_email_opt_in: Option, -} - -impl RegisterSchema { - /** - Returns a new [`Result`]. - ## Arguments - All but "String::username" and "bool::consent" are optional. - - ## Errors - You will receive a [`FieldFormatError`], if: - - The username is less than 2 or more than 32 characters in length - - You supply a `password` which is less than 1 or more than 72 characters in length. - - These constraints have been defined [in the Spacebar-API](https://docs.spacebar.chat/routes/) - */ - pub fn new( - username: String, - password: Option, - consent: bool, - email: Option, - fingerprint: Option, - invite: Option, - date_of_birth: Option, - gift_code_sku_id: Option, - captcha_key: Option, - promotional_email_opt_in: Option, - ) -> Result { - let username = AuthUsername::new(username)?.username; - - let email = if let Some(email) = email { - Some(AuthEmail::new(email)?.email) - } else { - None - }; - - let password = if let Some(password) = password { - Some(AuthPassword::new(password)?.password) - } else { - None - }; - - if !consent { - return Err(FieldFormatError::ConsentError); - } - - Ok(RegisterSchema { - username, - password, - consent, - email, - fingerprint, - invite, - date_of_birth, - gift_code_sku_id, - captcha_key, - promotional_email_opt_in, - }) - } -} - -/** -A struct that represents a well-formed login request. -## Arguments -Please use new() to create a new instance of this struct. -## Errors -You will receive a [`FieldFormatError`], if: -- The username is not between 2 and 32 characters. -- The password is not between 1 and 72 characters. - */ -#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "snake_case")] -pub struct LoginSchema { - pub login: String, - pub password: String, - pub undelete: Option, - pub captcha_key: Option, - pub login_source: Option, - pub gift_code_sku_id: Option, -} - -impl LoginSchema { - /** - Returns a new [`Result`]. - ## Arguments - login: The username you want to login with. - password: The password you want to login with. - undelete: Honestly no idea what this is for. - captcha_key: The captcha key you want to login with. - login_source: The login source. - gift_code_sku_id: The gift code sku id. - ## Errors - You will receive a [`FieldFormatError`], if: - - The username is less than 2 or more than 32 characters in length - */ - pub fn new( - login: String, - password: String, - undelete: Option, - captcha_key: Option, - login_source: Option, - gift_code_sku_id: Option, - ) -> Result { - let login = AuthUsername::new(login)?.username; - let password = AuthPassword::new(password)?.password; - - Ok(LoginSchema { - login, - password, - undelete, - captcha_key, - login_source, - gift_code_sku_id, - }) - } -} - -#[derive(Debug, Serialize, Deserialize)] -#[serde(rename_all = "snake_case")] -pub struct TotpSchema { - code: String, - ticket: String, - gift_code_sku_id: Option, - login_source: Option, -} diff --git a/types/schema/channel.rs b/types/schema/channel.rs deleted file mode 100644 index f6ee53c..0000000 --- a/types/schema/channel.rs +++ /dev/null @@ -1,27 +0,0 @@ -use serde::{Deserialize, Serialize}; - -use crate::entities::PermissionOverwrite; - -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "snake_case")] -pub struct ChannelCreateSchema { - pub name: String, - #[serde(rename = "type")] - pub channel_type: Option, - pub topic: Option, - pub icon: Option, - pub bitrate: Option, - pub user_limit: Option, - pub rate_limit_per_user: Option, - pub position: Option, - pub permission_overwrites: Option>, - pub parent_id: Option, - pub id: Option, - pub nsfw: Option, - pub rtc_region: Option, - pub default_auto_archive_duration: Option, - pub default_reaction_emoji: Option, - pub flags: Option, - pub default_thread_rate_limit_per_user: Option, - pub video_quality_mode: Option, -} diff --git a/types/schema/guild.rs b/types/schema/guild.rs deleted file mode 100644 index 92bb635..0000000 --- a/types/schema/guild.rs +++ /dev/null @@ -1,14 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::entities::Channel; - -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "snake_case")] -pub struct GuildCreateSchema { - pub name: Option, - pub region: Option, - pub icon: Option, - pub channels: Option>, - pub guild_template_code: Option, - pub system_channel_id: Option, - pub rules_channel_id: Option, -} \ No newline at end of file diff --git a/types/schema/message.rs b/types/schema/message.rs deleted file mode 100644 index a37f581..0000000 --- a/types/schema/message.rs +++ /dev/null @@ -1,47 +0,0 @@ -use serde::{Deserialize, Serialize}; -use crate::entities::{AllowedMention, Component, Embed, MessageReference, PartialDiscordFileAttachment}; - -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "snake_case")] -pub struct MessageSendSchema { - #[serde(rename = "type")] - message_type: Option, - content: Option, - nonce: Option, - tts: Option, - embeds: Option>, - allowed_mentions: Option, - message_reference: Option, - components: Option>, - sticker_ids: Option>, - pub attachments: Option>, -} - -// make a new() method for MessageSendSchema -impl MessageSendSchema { - pub fn new( - message_type: Option, - content: Option, - nonce: Option, - tts: Option, - embeds: Option>, - allowed_mentions: Option, - message_reference: Option, - components: Option>, - sticker_ids: Option>, - attachments: Option>, - ) -> MessageSendSchema { - MessageSendSchema { - message_type, - content, - nonce, - tts, - embeds, - allowed_mentions, - message_reference, - components, - sticker_ids, - attachments, - } - } -} \ No newline at end of file diff --git a/types/schema/mod.rs b/types/schema/mod.rs deleted file mode 100644 index 6fe3e37..0000000 --- a/types/schema/mod.rs +++ /dev/null @@ -1,103 +0,0 @@ -mod apierror; -mod auth; -mod channel; -mod guild; -mod message; -mod user; - -pub use apierror::*; -pub use auth::*; -pub use channel::*; -pub use guild::*; -pub use message::*; -pub use user::*; - -#[cfg(test)] -mod schemas_tests { - use super::*; - use crate::errors::FieldFormatError; - - #[test] - fn password_too_short() { - assert_eq!( - AuthPassword::new("".to_string()), - Err(FieldFormatError::PasswordError) - ); - } - - #[test] - fn password_too_long() { - let mut long_pw = String::new(); - for _ in 0..73 { - long_pw += "a"; - } - assert_eq!( - AuthPassword::new(long_pw), - Err(FieldFormatError::PasswordError) - ); - } - - #[test] - fn username_too_short() { - assert_eq!( - AuthUsername::new("T".to_string()), - Err(FieldFormatError::UsernameError) - ); - } - - #[test] - fn username_too_long() { - let mut long_un = String::new(); - for _ in 0..33 { - long_un += "a"; - } - assert_eq!( - AuthUsername::new(long_un), - Err(FieldFormatError::UsernameError) - ); - } - - #[test] - fn consent_false() { - assert_eq!( - RegisterSchema::new( - "Test".to_string(), - None, - false, - None, - None, - None, - None, - None, - None, - None, - ), - Err(FieldFormatError::ConsentError) - ); - } - - #[test] - fn invalid_email() { - assert_eq!( - AuthEmail::new("p@p.p".to_string()), - Err(FieldFormatError::EmailError) - ) - } - - #[test] - fn valid_email() { - let reg = RegisterSchema::new( - "Testy".to_string(), - None, - true, - Some("me@mail.de".to_string()), - None, - None, - None, - None, - None, - None, - ); - assert_ne!(reg, Err(FieldFormatError::EmailError)); - } -} diff --git a/types/schema/user.rs b/types/schema/user.rs deleted file mode 100644 index 00f4962..0000000 --- a/types/schema/user.rs +++ /dev/null @@ -1,16 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Deserialize, Serialize)] -#[serde(rename_all = "snake_case")] -pub struct UserModifySchema { - pub username: Option, - pub avatar: Option, - pub bio: Option, - pub accent_color: Option, - pub banner: Option, - pub current_password: Option, - pub new_password: Option, - pub code: Option, - pub email: Option, - pub discriminator: Option, -} \ No newline at end of file diff --git a/types/utils/jwt.rs b/types/utils/jwt.rs deleted file mode 100644 index 0a38dd4..0000000 --- a/types/utils/jwt.rs +++ /dev/null @@ -1,44 +0,0 @@ -use jsonwebtoken::{encode, EncodingKey, Header}; -use serde::{Deserialize, Serialize}; - -use crate::{utils::Snowflake}; - -pub fn generate_token(id: &Snowflake, email: String, jwt_key: &str) -> String { - let claims = Claims::new(&email, id); - - build_token(&claims, jwt_key).unwrap() -} - -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct Claims { - pub exp: i64, - pub iat: i64, - pub email: String, - pub id: String, -} - -impl Claims { - pub fn new(user: &str, id: &Snowflake) -> Self { - let unix = chrono::Utc::now().timestamp(); - Self { - exp: unix + (60 * 60 * 24), - id: id.to_string(), - iat: unix, - email: user.to_string(), - } - } -} - -pub fn build_token(claims: &Claims, jwt_key: &str) -> Result { - encode( - &Header::default(), - claims, - &EncodingKey::from_secret(jwt_key.as_bytes()), - ) -} - -/*pub fn decode_token(token: &str) -> Result, Error> { - let mut validation = Validation::new(Algorithm::HS256); - validation.sub = Some("quartzauth".to_string()); - decode(token, &DecodingKey::from_secret(JWT_SECRET), &validation) -}*/ diff --git a/types/utils/mod.rs b/types/utils/mod.rs deleted file mode 100644 index ec2fd4a..0000000 --- a/types/utils/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -pub mod jwt; -mod regexes; -mod rights; -mod snowflake; - -pub use regexes::*; -pub use rights::Rights; -pub use snowflake::{DeconstructedSnowflake, Snowflake}; diff --git a/types/utils/regexes.rs b/types/utils/regexes.rs deleted file mode 100644 index 0f160eb..0000000 --- a/types/utils/regexes.rs +++ /dev/null @@ -1,12 +0,0 @@ -use lazy_static::lazy_static; -use regex::Regex; - -lazy_static! { - static ref DOUBLE_WHITE_SPACE_RE: Regex = Regex::new(r"\s\s+").unwrap(); - static ref SPECIAL_CHAR: Regex = Regex::new(r"@#`:\r\n\t\f\v\p{C}").unwrap(); - static ref CHANNEL_MENTION: Regex = Regex::new(r"<#(\d+)>").unwrap(); - static ref USER_MENTION: Regex = Regex::new(r"<@!?(\d+)>").unwrap(); - static ref ROLE_MENTION: Regex = Regex::new(r"<@&(\d+)>").unwrap(); - static ref EVERYONE_MENTION: Regex = Regex::new(r"@everyone").unwrap(); - static ref HERE_MENTION: Regex = Regex::new(r"@here").unwrap(); -} diff --git a/types/utils/rights.rs b/types/utils/rights.rs deleted file mode 100644 index 0198af6..0000000 --- a/types/utils/rights.rs +++ /dev/null @@ -1,127 +0,0 @@ -use bitflags::bitflags; - -bitflags! { - pub struct Rights: u64 { - const OPERATOR = 1 << 0; - const MANAGE_APPLICATIONS = 1 << 1; - const MANAGE_GUILDS = 1 << 2; - const MANAGE_MESSAGES = 1 << 3; - const MANAGE_RATE_LIMITS = 1 << 4; - const MANAGE_ROUTING = 1 << 5; - const MANAGE_TICKETS = 1 << 6; - const MANAGE_USERS = 1 << 7; - const ADD_MEMBERS = 1 << 8; - const BYPASS_RATE_LIMITS = 1 << 9; - const CREATE_APPLICATIONS = 1 << 10; - const CREATE_CHANNELS = 1 << 11; - const CREATE_DMS = 1 << 12; - const CREATE_DM_GROUPS = 1 << 13; - const CREATE_GUILDS = 1 << 14; - const CREATE_INVITES = 1 << 15; - const CREATE_ROLES = 1 << 16; - const CREATE_TEMPLATES = 1 << 17; - const CREATE_WEBHOOKS = 1 << 18; - const JOIN_GUILDS = 1 << 19; - const PIN_MESSAGES = 1 << 20; - const SELF_ADD_REACTIONS = 1 << 21; - const SELF_DELETE_MESSAGES = 1 << 22; - const SELF_EDIT_MESSAGES = 1 << 23; - const SELF_EDIT_NAME = 1 << 24; - const SEND_MESSAGES = 1 << 25; - const USE_ACTIVITIES = 1 << 26; - const USE_VIDEO = 1 << 27; - const USE_VOICE = 1 << 28; - const INVITE_USERS = 1 << 29; - const SELF_DELETE_DISABLE = 1 << 30; - const DEBTABLE = 1 << 31; - const CREDITABLE = 1 << 32; - const KICK_BAN_MEMBERS = 1 << 33; - const SELF_LEAVE_GROUPS = 1 << 34; - const PRESENCE = 1 << 35; - const SELF_ADD_DISCOVERABLE = 1 << 36; - const MANAGE_GUILD_DIRECTORY = 1 << 37; - const POGGERS = 1 << 38; - const USE_ACHIEVEMENTS = 1 << 39; - const INITIATE_INTERACTIONS = 1 << 40; - const RESPOND_TO_INTERACTIONS = 1 << 41; - const SEND_BACKDATED_EVENTS = 1 << 42; - const USE_MASS_INVITES = 1 << 43; - const ACCEPT_INVITES = 1 << 44; - const SELF_EDIT_FLAGS = 1 << 45; - const EDIT_FLAGS = 1 << 46; - const MANAGE_GROUPS = 1 << 47; - const VIEW_SERVER_STATS = 1 << 48; - const RESEND_VERIFICATION_EMAIL = 1 << 49; - } -} - -impl Rights { - pub fn any(&self, permission: Rights, check_operator: bool) -> bool { - (check_operator && self.contains(Rights::OPERATOR)) || self.contains(permission) - } - - pub fn has(&self, permission: Rights, check_operator: bool) -> bool { - (check_operator && self.contains(Rights::OPERATOR)) || self.contains(permission) - } - - pub fn has_throw(&self, permission: Rights) -> Result { - if self.has(permission, true) { - Ok(true) - } else { - Err("You are missing the following rights") - } - } -} - -fn all_rights() -> Rights { - Rights::OPERATOR - | Rights::MANAGE_APPLICATIONS - | Rights::MANAGE_GUILDS - | Rights::MANAGE_MESSAGES - | Rights::MANAGE_RATE_LIMITS - | Rights::MANAGE_ROUTING - | Rights::MANAGE_TICKETS - | Rights::MANAGE_USERS - | Rights::ADD_MEMBERS - | Rights::BYPASS_RATE_LIMITS - | Rights::CREATE_APPLICATIONS - | Rights::CREATE_CHANNELS - | Rights::CREATE_DMS - | Rights::CREATE_DM_GROUPS - | Rights::CREATE_GUILDS - | Rights::CREATE_INVITES - | Rights::CREATE_ROLES - | Rights::CREATE_TEMPLATES - | Rights::CREATE_WEBHOOKS - | Rights::JOIN_GUILDS - | Rights::PIN_MESSAGES - | Rights::SELF_ADD_REACTIONS - | Rights::SELF_DELETE_MESSAGES - | Rights::SELF_EDIT_MESSAGES - | Rights::SELF_EDIT_NAME - | Rights::SEND_MESSAGES - | Rights::USE_ACTIVITIES - | Rights::USE_VIDEO - | Rights::USE_VOICE - | Rights::INVITE_USERS - | Rights::SELF_DELETE_DISABLE - | Rights::DEBTABLE - | Rights::CREDITABLE - | Rights::KICK_BAN_MEMBERS - | Rights::SELF_LEAVE_GROUPS - | Rights::PRESENCE - | Rights::SELF_ADD_DISCOVERABLE - | Rights::MANAGE_GUILD_DIRECTORY - | Rights::POGGERS - | Rights::USE_ACHIEVEMENTS - | Rights::INITIATE_INTERACTIONS - | Rights::RESPOND_TO_INTERACTIONS - | Rights::SEND_BACKDATED_EVENTS - | Rights::USE_MASS_INVITES - | Rights::ACCEPT_INVITES - | Rights::SELF_EDIT_FLAGS - | Rights::EDIT_FLAGS - | Rights::MANAGE_GROUPS - | Rights::VIEW_SERVER_STATS - | Rights::RESEND_VERIFICATION_EMAIL -} diff --git a/types/utils/snowflake.rs b/types/utils/snowflake.rs deleted file mode 100644 index 7c756fa..0000000 --- a/types/utils/snowflake.rs +++ /dev/null @@ -1,160 +0,0 @@ -use std::fmt::Display; - -use atomic::Atomic; -use bigdecimal::{Num, ToPrimitive, Zero}; -use num_bigint::{BigInt, ToBigInt}; -use serde::{Deserialize, Serialize}; -#[cfg(feature = "sqlx")] -use sqlx::Type; - -const EPOCH: i64 = 1420070400000; -static WORKER_ID: u128 = 0; -static PROCESS_ID: u128 = 1; -lazy_static::lazy_static! { - static ref INCREMENT: Atomic = Atomic::default(); -} -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -#[cfg_attr(feature = "sqlx", derive(Type))] -#[cfg_attr(feature = "sqlx", sqlx(transparent))] -pub struct Snowflake(String); - -impl Default for Snowflake { - fn default() -> Self { - Self::generate() - } -} - -impl Display for Snowflake { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.0) - } -} - -impl Snowflake { - pub fn to_binary(&self) -> String { - let self_len = self.0.len(); - let high = self.0[..self_len - 10].parse::().unwrap_or(0); - let low = self.0[self_len - 10..].parse::().unwrap(); - let mut low = low; - let mut high = high; - let mut bin = Vec::with_capacity(64); - - while low > 0 || high > 0 { - bin.push((low & 1) as u8); - low >>= 1; - - if high > 0 { - low += 5_000_000_000 * (high % 2); - high >>= 1; - } - } - - bin.iter() - .rev() - .map(|b| char::from_digit(*b as u32, 10).unwrap()) - .collect() - } - - pub fn from_binary(num: &str) -> String { - let mut num = BigInt::from_str_radix(num, 2).unwrap(); - let mut dec = Vec::with_capacity(18); - - let ten = 10.to_bigint().unwrap(); - let _two = 2.to_bigint().unwrap(); - let _thirty_two = 32.to_bigint().unwrap(); - - while num.bits() > 50 { - let high: BigInt = &num >> 32; - let low: BigInt = (high.clone() % &ten) << 32 | &num & BigInt::from((1u64 << 32) - 1); - - let next: BigInt = low.clone() % &ten; - dec.push(next.to_u8().unwrap()); - num = (high / &ten) << 32 | (low / &ten); - } - - while !num.is_zero() { - dec.push((num.clone() % &ten).to_u8().unwrap()); - num /= &ten; - } - - dec.iter() - .rev() - .map(|d| char::from_digit(*d as u32, 10).unwrap()) - .collect() - } - - pub fn generate_worker_process() -> u128 { - let time = (chrono::Utc::now().naive_utc().timestamp_millis() - EPOCH) << 22; - let worker = WORKER_ID << 17; - let process = PROCESS_ID << 12; - let increment = INCREMENT.load(atomic::Ordering::Relaxed); - - INCREMENT.store(increment + 1, atomic::Ordering::Relaxed); - - time as u128 | worker | process | increment - } - - pub fn generate() -> Self { - Self(Self::generate_worker_process().to_string()) - } - - pub fn deconstruct(&self) -> DeconstructedSnowflake { - let binary = format!("{:0>64}", self.to_binary()); - - let ts = i64::from_str_radix(&binary[0..42], 2).unwrap() + EPOCH; - let wid = u64::from_str_radix(&binary[42..47], 2).unwrap(); - let pid = u64::from_str_radix(&binary[47..52], 2).unwrap(); - let increment = BigInt::from_str_radix(&binary[52..64], 2).unwrap(); - - DeconstructedSnowflake { - timestamp: ts, - worker_id: wid, - process_id: pid, - increment, - binary, - } - } -} - -#[derive(Debug, Clone, PartialEq, Eq)] -pub struct DeconstructedSnowflake { - pub timestamp: i64, - pub worker_id: u64, - pub process_id: u64, - pub increment: BigInt, - pub binary: String, -} - -#[cfg(test)] -mod test { - use super::Snowflake; - - #[test] - fn test_new_snowflake() { - let snow = Snowflake::generate(); - println!("{snow}"); - } - - #[test] - fn snowflake_to_binary() { - let snowflake = super::Snowflake("1104339392517902336".to_string()); - - let bin = snowflake.to_binary(); - println!("{bin}"); - } - - #[test] - fn binary_to_snowflake() { - let snowflake = super::Snowflake::from_binary( - "111101010011011001101101001110010010100000000001000000000000", - ); - println!("{snowflake}"); - } - - #[test] - fn test_deconstruct() { - let new = super::Snowflake::generate(); - - println!("{:?}", new.deconstruct()); - } -}