Make components be Arc<Mutex<T>>

This commit is contained in:
bitfl0wer 2023-08-02 23:08:53 +02:00
parent a36d691fea
commit 94eac6eba9
13 changed files with 54 additions and 30 deletions

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use chorus_macros::Updateable; use chorus_macros::Updateable;
use chrono::Utc; use chrono::Utc;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -46,7 +48,7 @@ pub struct Channel {
pub last_pin_timestamp: Option<String>, pub last_pin_timestamp: Option<String>,
pub managed: Option<bool>, pub managed: Option<bool>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub member: Option<ThreadMember>, pub member: Option<Arc<Mutex<ThreadMember>>>,
pub member_count: Option<i32>, pub member_count: Option<i32>,
pub message_count: Option<i32>, pub message_count: Option<i32>,
pub name: Option<String>, pub name: Option<String>,
@ -56,12 +58,12 @@ pub struct Channel {
#[cfg(feature = "sqlx")] #[cfg(feature = "sqlx")]
pub permission_overwrites: Option<sqlx::types::Json<Vec<PermissionOverwrite>>>, pub permission_overwrites: Option<sqlx::types::Json<Vec<PermissionOverwrite>>>,
#[cfg(not(feature = "sqlx"))] #[cfg(not(feature = "sqlx"))]
pub permission_overwrites: Option<Vec<PermissionOverwrite>>, pub permission_overwrites: Option<Vec<Arc<Mutex<PermissionOverwrite>>>>,
pub permissions: Option<String>, pub permissions: Option<String>,
pub position: Option<i32>, pub position: Option<i32>,
pub rate_limit_per_user: Option<i32>, pub rate_limit_per_user: Option<i32>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub recipients: Option<Vec<User>>, pub recipients: Option<Vec<Arc<Mutex<User>>>>,
pub rtc_region: Option<String>, pub rtc_region: Option<String>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub thread_metadata: Option<ThreadMetadata>, pub thread_metadata: Option<ThreadMetadata>,
@ -154,7 +156,7 @@ pub struct ThreadMember {
pub user_id: Option<Snowflake>, pub user_id: Option<Snowflake>,
pub join_timestamp: Option<String>, pub join_timestamp: Option<String>,
pub flags: Option<u64>, pub flags: Option<u64>,
pub member: Option<GuildMember>, pub member: Option<Arc<Mutex<GuildMember>>>,
} }
#[derive(Debug, Deserialize, Serialize, Clone)] #[derive(Debug, Deserialize, Serialize, Clone)]

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::types::entities::User; use crate::types::entities::User;
@ -15,7 +17,7 @@ pub struct Emoji {
#[cfg(not(feature = "sqlx"))] #[cfg(not(feature = "sqlx"))]
pub roles: Option<Vec<Snowflake>>, pub roles: Option<Vec<Snowflake>>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub user: Option<User>, pub user: Option<Arc<Mutex<User>>>,
pub require_colons: Option<bool>, pub require_colons: Option<bool>,
pub managed: Option<bool>, pub managed: Option<bool>,
pub animated: Option<bool>, pub animated: Option<bool>,

View File

@ -42,7 +42,7 @@ pub struct Guild {
pub icon_hash: Option<String>, pub icon_hash: Option<String>,
pub id: Snowflake, pub id: Snowflake,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub invites: Option<Vec<GuildInvite>>, pub invites: Option<Vec<Arc<Mutex<GuildInvite>>>>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub joined_at: Option<String>, pub joined_at: Option<String>,
pub large: Option<bool>, pub large: Option<bool>,
@ -68,7 +68,7 @@ pub struct Guild {
pub public_updates_channel_id: Option<Snowflake>, pub public_updates_channel_id: Option<Snowflake>,
pub region: Option<String>, pub region: Option<String>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub roles: Option<Vec<RoleObject>>, pub roles: Option<Vec<Arc<Mutex<RoleObject>>>>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub rules_channel: Option<String>, pub rules_channel: Option<String>,
pub rules_channel_id: Option<Snowflake>, pub rules_channel_id: Option<Snowflake>,
@ -81,13 +81,13 @@ pub struct Guild {
pub vanity_url_code: Option<String>, pub vanity_url_code: Option<String>,
pub verification_level: Option<i32>, pub verification_level: Option<i32>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub voice_states: Option<Vec<VoiceState>>, pub voice_states: Option<Vec<Arc<Mutex<VoiceState>>>>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub webhooks: Option<Vec<Webhook>>, pub webhooks: Option<Vec<Arc<Mutex<Webhook>>>>,
#[cfg(feature = "sqlx")] #[cfg(feature = "sqlx")]
pub welcome_screen: Option<sqlx::types::Json<WelcomeScreenObject>>, pub welcome_screen: Option<sqlx::types::Json<WelcomeScreenObject>>,
#[cfg(not(feature = "sqlx"))] #[cfg(not(feature = "sqlx"))]
pub welcome_screen: Option<WelcomeScreenObject>, pub welcome_screen: Option<Arc<Mutex<WelcomeScreenObject>>>,
pub widget_channel_id: Option<Snowflake>, pub widget_channel_id: Option<Snowflake>,
pub widget_enabled: Option<bool>, pub widget_enabled: Option<bool>,
} }
@ -113,11 +113,11 @@ pub struct GuildInvite {
pub created_at: DateTime<Utc>, pub created_at: DateTime<Utc>,
pub expires_at: Option<DateTime<Utc>>, pub expires_at: Option<DateTime<Utc>>,
pub guild_id: Snowflake, pub guild_id: Snowflake,
pub guild: Option<Guild>, pub guild: Option<Arc<Mutex<Guild>>>,
pub channel_id: Snowflake, pub channel_id: Snowflake,
pub channel: Option<Channel>, pub channel: Option<Arc<Mutex<Channel>>>,
pub inviter_id: Option<Snowflake>, pub inviter_id: Option<Snowflake>,
pub inviter: Option<User>, pub inviter: Option<Arc<Mutex<User>>>,
pub target_user_id: Option<Snowflake>, pub target_user_id: Option<Snowflake>,
pub target_user: Option<String>, pub target_user: Option<String>,
pub target_user_type: Option<i32>, pub target_user_type: Option<i32>,
@ -151,7 +151,7 @@ pub struct GuildScheduledEvent {
pub entity_type: GuildScheduledEventEntityType, pub entity_type: GuildScheduledEventEntityType,
pub entity_id: Option<Snowflake>, pub entity_id: Option<Snowflake>,
pub entity_metadata: Option<GuildScheduledEventEntityMetadata>, pub entity_metadata: Option<GuildScheduledEventEntityMetadata>,
pub creator: Option<User>, pub creator: Option<Arc<Mutex<User>>>,
pub user_count: Option<u64>, pub user_count: Option<u64>,
pub image: Option<String>, pub image: Option<String>,
} }

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::types::{entities::PublicUser, Snowflake}; use crate::types::{entities::PublicUser, Snowflake};
@ -8,7 +10,7 @@ use crate::types::{entities::PublicUser, Snowflake};
/// # Reference /// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/guild#guild-member-object> /// See <https://discord-userdoccers.vercel.app/resources/guild#guild-member-object>
pub struct GuildMember { pub struct GuildMember {
pub user: Option<PublicUser>, pub user: Option<Arc<Mutex<PublicUser>>>,
pub nick: Option<String>, pub nick: Option<String>,
pub avatar: Option<String>, pub avatar: Option<String>,
pub roles: Vec<Snowflake>, pub roles: Vec<Snowflake>,

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -21,14 +23,14 @@ pub struct Integration {
pub expire_behaviour: Option<u8>, pub expire_behaviour: Option<u8>,
pub expire_grace_period: Option<u16>, pub expire_grace_period: Option<u16>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub user: Option<User>, pub user: Option<Arc<Mutex<User>>>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub account: IntegrationAccount, pub account: IntegrationAccount,
pub synced_at: Option<DateTime<Utc>>, pub synced_at: Option<DateTime<Utc>>,
pub subscriber_count: Option<f64>, pub subscriber_count: Option<f64>,
pub revoked: Option<bool>, pub revoked: Option<bool>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub application: Option<Application>, pub application: Option<Arc<Mutex<Application>>>,
pub scopes: Option<Vec<String>>, pub scopes: Option<Vec<String>>,
} }

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -68,7 +70,7 @@ pub enum NSFWLevel {
/// See <https://discord-userdoccers.vercel.app/resources/invite#invite-stage-instance-object> /// See <https://discord-userdoccers.vercel.app/resources/invite#invite-stage-instance-object>
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub struct InviteStageInstance { pub struct InviteStageInstance {
pub members: Vec<GuildMember>, pub members: Vec<Arc<Mutex<GuildMember>>>,
pub participant_count: i32, pub participant_count: i32,
pub speaker_count: i32, pub speaker_count: i32,
pub topic: String, pub topic: String,

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr}; use serde_repr::{Deserialize_repr, Serialize_repr};
@ -13,7 +15,7 @@ pub struct Relationship {
#[serde(rename = "type")] #[serde(rename = "type")]
pub relationship_type: RelationshipType, pub relationship_type: RelationshipType,
pub nickname: Option<String>, pub nickname: Option<String>,
pub user: PublicUser, pub user: Arc<Mutex<PublicUser>>,
pub since: Option<DateTime<Utc>>, pub since: Option<DateTime<Utc>>,
} }

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::types::{entities::User, utils::Snowflake}; use crate::types::{entities::User, utils::Snowflake};
@ -22,7 +24,7 @@ pub struct Sticker {
pub available: Option<bool>, pub available: Option<bool>,
pub guild_id: Option<Snowflake>, pub guild_id: Option<Snowflake>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub user: Option<User>, pub user: Option<Arc<Mutex<User>>>,
pub sort_value: Option<u8>, pub sort_value: Option<u8>,
} }

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::types::entities::User; use crate::types::entities::User;
@ -19,5 +21,5 @@ pub struct TeamMember {
pub membership_state: u8, pub membership_state: u8,
pub permissions: Vec<String>, pub permissions: Vec<String>,
pub team_id: Snowflake, pub team_id: Snowflake,
pub user: User, pub user: Arc<Mutex<User>>,
} }

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -16,13 +18,13 @@ pub struct GuildTemplate {
pub usage_count: Option<u64>, pub usage_count: Option<u64>,
pub creator_id: Snowflake, pub creator_id: Snowflake,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub creator: User, pub creator: Arc<Mutex<User>>,
pub created_at: DateTime<Utc>, pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>, pub updated_at: DateTime<Utc>,
pub source_guild_id: Snowflake, pub source_guild_id: Snowflake,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub source_guild: Vec<Guild>, pub source_guild: Vec<Arc<Mutex<Guild>>>,
// Unsure how a {recursive: Guild} looks like, might be a Vec? // Unsure how a {recursive: Guild} looks like, might be a Vec?
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub serialized_source_guild: Vec<Guild>, pub serialized_source_guild: Vec<Arc<Mutex<Guild>>>,
} }

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use chrono::{serde::ts_milliseconds_option, Utc}; use chrono::{serde::ts_milliseconds_option, Utc};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -73,7 +75,7 @@ pub struct UserSettings {
#[cfg(not(feature = "sqlx"))] #[cfg(not(feature = "sqlx"))]
pub restricted_guilds: Vec<String>, pub restricted_guilds: Vec<String>,
pub show_current_game: bool, pub show_current_game: bool,
pub status: UserStatus, pub status: Arc<Mutex<UserStatus>>,
pub stream_notifications_enabled: bool, pub stream_notifications_enabled: bool,
pub theme: UserTheme, pub theme: UserTheme,
pub timezone_offset: i16, pub timezone_offset: i16,
@ -109,7 +111,7 @@ impl Default for UserSettings {
render_reactions: true, render_reactions: true,
restricted_guilds: Default::default(), restricted_guilds: Default::default(),
show_current_game: true, show_current_game: true,
status: UserStatus::Online, status: Arc::new(Mutex::new(UserStatus::Online)),
stream_notifications_enabled: false, stream_notifications_enabled: false,
theme: UserTheme::Dark, theme: UserTheme::Dark,
timezone_offset: 0, timezone_offset: 0,
@ -149,5 +151,5 @@ pub struct GuildFolder {
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub struct LoginResult { pub struct LoginResult {
pub token: String, pub token: String,
pub settings: UserSettings, pub settings: Arc<Mutex<UserSettings>>,
} }

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -14,7 +16,7 @@ pub struct VoiceState {
pub guild: Option<Guild>, pub guild: Option<Guild>,
pub channel_id: Option<Snowflake>, pub channel_id: Option<Snowflake>,
pub user_id: Snowflake, pub user_id: Snowflake,
pub member: Option<GuildMember>, pub member: Option<Arc<Mutex<GuildMember>>>,
pub session_id: Snowflake, pub session_id: Snowflake,
pub token: Option<String>, pub token: Option<String>,
pub deaf: bool, pub deaf: bool,

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, Mutex};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::types::{ use crate::types::{
@ -20,10 +22,10 @@ pub struct Webhook {
pub application_id: Snowflake, pub application_id: Snowflake,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub user: Option<User>, pub user: Option<Arc<Mutex<User>>>,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub source_guild: Option<Guild>, pub source_guild: Option<Arc<Mutex<Guild>>>,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>, pub url: Option<String>,
} }