Add Composite to some types

This commit is contained in:
bitfl0wer 2023-08-15 17:38:53 +02:00
parent 7a21154726
commit a1a99aff8d
No known key found for this signature in database
GPG Key ID: 0ACD574FCF5226CF
7 changed files with 34 additions and 16 deletions

View File

@ -1,18 +1,19 @@
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
use chorus_macros::Updateable; use chorus_macros::{observe_option_vec, Composite, Updateable};
use chrono::Utc; use chrono::Utc;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_aux::prelude::deserialize_string_from_number; use serde_aux::prelude::deserialize_string_from_number;
use serde_repr::{Deserialize_repr, Serialize_repr}; use serde_repr::{Deserialize_repr, Serialize_repr};
use crate::gateway::Updateable; use crate::gateway::{GatewayHandle, Updateable};
use crate::types::{ use crate::types::{
entities::{GuildMember, User}, entities::{GuildMember, User},
utils::Snowflake, utils::Snowflake,
Composite,
}; };
#[derive(Default, Debug, Serialize, Deserialize, Clone, Updateable)] #[derive(Default, Debug, Serialize, Deserialize, Clone, Updateable, Composite)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
/// Represents a guild of private channel /// Represents a guild of private channel
/// ///
@ -48,7 +49,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<Arc<RwLock<ThreadMember>>>, pub member: Option<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>,
@ -58,11 +59,13 @@ 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"))]
#[observe_option_vec]
pub permission_overwrites: Option<Vec<Arc<RwLock<PermissionOverwrite>>>>, pub permission_overwrites: Option<Vec<Arc<RwLock<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))]
#[observe_option_vec]
pub recipients: Option<Vec<Arc<RwLock<User>>>>, pub recipients: Option<Vec<Arc<RwLock<User>>>>,
pub rtc_region: Option<String>, pub rtc_region: Option<String>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
@ -122,7 +125,7 @@ pub struct Tag {
pub emoji_name: Option<String>, pub emoji_name: Option<String>,
} }
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd)] #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd, Updateable)]
pub struct PermissionOverwrite { pub struct PermissionOverwrite {
pub id: Snowflake, pub id: Snowflake,
#[serde(rename = "type")] #[serde(rename = "type")]

View File

@ -1,16 +1,18 @@
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
use chorus_macros::Updateable;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::gateway::Updateable;
use crate::types::entities::User; use crate::types::entities::User;
use crate::types::Snowflake; use crate::types::Snowflake;
#[derive(Debug, Clone, Deserialize, Serialize, Default)] #[derive(Debug, Clone, Deserialize, Serialize, Default, Updateable)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
/// # Reference /// # Reference
/// See <https://discord-userdoccers.vercel.app/resources/emoji#emoji-object> /// See <https://discord-userdoccers.vercel.app/resources/emoji#emoji-object>
pub struct Emoji { pub struct Emoji {
pub id: Option<Snowflake>, pub id: Snowflake,
pub name: Option<String>, pub name: Option<String>,
#[cfg(feature = "sqlx")] #[cfg(feature = "sqlx")]
pub roles: Option<sqlx::types::Json<Vec<Snowflake>>>, pub roles: Option<sqlx::types::Json<Vec<Snowflake>>>,

View File

@ -1,6 +1,6 @@
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
use chorus_macros::{observe_option_vec, Composite, Updateable}; use chorus_macros::{observe_option_vec, observe_vec, Composite, Updateable};
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};
@ -37,6 +37,7 @@ pub struct Guild {
pub discovery_splash: Option<String>, pub discovery_splash: Option<String>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
#[serde(default)] #[serde(default)]
#[observe_vec]
pub emojis: Vec<Arc<RwLock<Emoji>>>, pub emojis: Vec<Arc<RwLock<Emoji>>>,
pub explicit_content_filter: Option<i32>, pub explicit_content_filter: Option<i32>,
//#[cfg_attr(feature = "sqlx", sqlx(try_from = "String"))] //#[cfg_attr(feature = "sqlx", sqlx(try_from = "String"))]
@ -46,7 +47,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<Arc<RwLock<GuildInvite>>>>, pub invites: Option<Vec<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>,
@ -72,6 +73,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))]
#[observe_option_vec]
pub roles: Option<Vec<Arc<RwLock<RoleObject>>>>, pub roles: Option<Vec<Arc<RwLock<RoleObject>>>>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
pub rules_channel: Option<String>, pub rules_channel: Option<String>,
@ -85,13 +87,15 @@ 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))]
#[observe_option_vec]
pub voice_states: Option<Vec<Arc<RwLock<VoiceState>>>>, pub voice_states: Option<Vec<Arc<RwLock<VoiceState>>>>,
#[cfg_attr(feature = "sqlx", sqlx(skip))] #[cfg_attr(feature = "sqlx", sqlx(skip))]
#[observe_option_vec]
pub webhooks: Option<Vec<Arc<RwLock<Webhook>>>>, pub webhooks: Option<Vec<Arc<RwLock<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<Arc<RwLock<WelcomeScreenObject>>>, pub welcome_screen: Option<WelcomeScreenObject>,
pub widget_channel_id: Option<Snowflake>, pub widget_channel_id: Option<Snowflake>,
pub widget_enabled: Option<bool>, pub widget_enabled: Option<bool>,
} }

View File

@ -1,10 +1,12 @@
use bitflags::bitflags; use bitflags::bitflags;
use chorus_macros::Updateable;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_aux::prelude::{deserialize_option_number_from_string, deserialize_string_from_number}; use serde_aux::prelude::{deserialize_option_number_from_string, deserialize_string_from_number};
use crate::gateway::Updateable;
use crate::types::utils::Snowflake; use crate::types::utils::Snowflake;
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)] #[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Updateable)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
/// See <https://discord.com/developers/docs/topics/permissions#role-object> /// See <https://discord.com/developers/docs/topics/permissions#role-object>
pub struct RoleObject { pub struct RoleObject {

View File

@ -1,8 +1,11 @@
use crate::types::utils::Snowflake; use chorus_macros::Updateable;
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_aux::prelude::deserialize_option_number_from_string; use serde_aux::prelude::deserialize_option_number_from_string;
use crate::gateway::Updateable;
use crate::types::utils::Snowflake;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))] #[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
pub struct UserData { pub struct UserData {
@ -15,7 +18,7 @@ impl User {
PublicUser::from(self) PublicUser::from(self)
} }
} }
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq)] #[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq, Updateable)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct User { pub struct User {
pub id: Snowflake, pub id: Snowflake,

View File

@ -1,15 +1,17 @@
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
use chorus_macros::Updateable;
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::gateway::Updateable;
use crate::types::{ use crate::types::{
entities::{Guild, GuildMember}, entities::{Guild, GuildMember},
utils::Snowflake, utils::Snowflake,
}; };
/// See <https://docs.spacebar.chat/routes/#cmp--schemas-voicestate> /// See <https://docs.spacebar.chat/routes/#cmp--schemas-voicestate>
#[derive(Serialize, Deserialize, Debug, Default, Clone)] #[derive(Serialize, Deserialize, Debug, Default, Clone, Updateable)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct VoiceState { pub struct VoiceState {
pub guild_id: Option<Snowflake>, pub guild_id: Option<Snowflake>,
@ -27,5 +29,5 @@ pub struct VoiceState {
pub self_video: bool, pub self_video: bool,
pub suppress: bool, pub suppress: bool,
pub request_to_speak_timestamp: Option<DateTime<Utc>>, pub request_to_speak_timestamp: Option<DateTime<Utc>>,
pub id: Option<Snowflake>, pub id: Snowflake,
} }

View File

@ -1,14 +1,16 @@
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
use chorus_macros::Updateable;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::gateway::Updateable;
use crate::types::{ use crate::types::{
entities::{Guild, User}, entities::{Guild, User},
utils::Snowflake, utils::Snowflake,
}; };
/// See <https://docs.spacebar.chat/routes/#cmp--schemas-webhook> /// See <https://docs.spacebar.chat/routes/#cmp--schemas-webhook>
#[derive(Serialize, Deserialize, Debug, Default, Clone)] #[derive(Serialize, Deserialize, Debug, Default, Clone, Updateable)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))] #[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct Webhook { pub struct Webhook {
pub id: Snowflake, pub id: Snowflake,