Compare commits
41 Commits
a5a0459d70
...
5154d04d4a
Author | SHA1 | Date |
---|---|---|
kozabrada123 | 5154d04d4a | |
Quat3rnion | dfd6b371f3 | |
Quat3rnion | 0d01536f59 | |
Quat3rnion | c34b1da8d0 | |
Quat3rnion | 0f1e693d60 | |
Quat3rnion | cab4cb1ce6 | |
Quat3rnion | 9f281879a9 | |
Quat3rnion | 450aa9f440 | |
Quat3rnion | 133b03f1c8 | |
Quat3rnion | 6c1493f362 | |
Quat3rnion | c96dcd5c33 | |
Quat3rnion | 0bf5091f3c | |
Quat3rnion | cb905d0a83 | |
Quat3rnion | 82c8f570f2 | |
Quat3rnion | 0c9e9cf367 | |
Quat3rnion | 32677b8cd9 | |
Quat3rnion | 50c5c29cae | |
Quat3rnion | 2db91e8538 | |
Quat3rnion | fcda4cc2ca | |
Quat3rnion | 119a09ae88 | |
Quat3rnion | 2b4e9fa149 | |
Quat3rnion | f178e517d3 | |
Quat3rnion | 2b06742a62 | |
Quat3rnion | 97f10aaa61 | |
Quat3rnion | 4d75aa89c9 | |
Quat3rnion | 40bdafd1a3 | |
Quat3rnion | 179b8d228a | |
Quat3rnion | 7d55bbea4b | |
Quat3rnion | 85aa854953 | |
Quat3rnion | 7548f0e592 | |
Quat3rnion | d6ad68c044 | |
Quat3rnion | 0bc54ce46f | |
Quat3rnion | eefdd4aebf | |
Quat3rnion | a75701d9c6 | |
Quat3rnion | 8c5d80d3f1 | |
Quat3rnion | 08952db014 | |
Quat3rnion | ab4435a79f | |
Quat3rnion | 7b7294433b | |
Quat3rnion | c44521320d | |
Quat3rnion | d1b3a9ad9e | |
Quat3rnion | f876f25a2c |
|
@ -177,7 +177,7 @@ pub struct ThreadMember {
|
||||||
pub member: Option<Shared<GuildMember>>,
|
pub member: Option<Shared<GuildMember>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq, PartialOrd)]
|
||||||
/// Specifies the emoji to use as the default way to react to a [ChannelType::GuildForum] or [ChannelType::GuildMedia] channel post.
|
/// Specifies the emoji to use as the default way to react to a [ChannelType::GuildForum] or [ChannelType::GuildMedia] channel post.
|
||||||
///
|
///
|
||||||
/// # Reference
|
/// # Reference
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::{Snowflake, WelcomeScreenObject, Shared};
|
use crate::types::{Snowflake, WelcomeScreenObject, Shared, InviteFlags, InviteType, InviteTargetType};
|
||||||
|
|
||||||
use super::guild::GuildScheduledEvent;
|
use super::guild::GuildScheduledEvent;
|
||||||
use super::{Application, Channel, GuildMember, NSFWLevel, User};
|
use super::{Application, Channel, GuildMember, NSFWLevel, User};
|
||||||
|
@ -13,25 +13,35 @@ use super::{Application, Channel, GuildMember, NSFWLevel, User};
|
||||||
/// Represents a code that when used, adds a user to a guild or group DM channel, or creates a relationship between two users.
|
/// Represents a code that when used, adds a user to a guild or group DM channel, or creates a relationship between two users.
|
||||||
/// See <https://discord-userdoccers.vercel.app/resources/invite#invite-object>
|
/// See <https://discord-userdoccers.vercel.app/resources/invite#invite-object>
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Invite {
|
pub struct Invite {
|
||||||
pub approximate_member_count: Option<i32>,
|
pub approximate_member_count: Option<i32>,
|
||||||
pub approximate_presence_count: Option<i32>,
|
pub approximate_presence_count: Option<i32>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub channel: Option<Channel>,
|
pub channel: Option<Channel>,
|
||||||
pub code: String,
|
pub code: String,
|
||||||
pub created_at: Option<DateTime<Utc>>,
|
pub created_at: Option<DateTime<Utc>>,
|
||||||
pub expires_at: Option<DateTime<Utc>>,
|
pub expires_at: Option<DateTime<Utc>>,
|
||||||
pub flags: Option<i32>,
|
pub flags: Option<InviteFlags>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub guild: Option<InviteGuild>,
|
pub guild: Option<InviteGuild>,
|
||||||
pub guild_id: Option<Snowflake>,
|
pub guild_id: Option<Snowflake>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub guild_scheduled_event: Option<Shared<GuildScheduledEvent>>,
|
pub guild_scheduled_event: Option<Shared<GuildScheduledEvent>>,
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
pub invite_type: Option<i32>,
|
#[cfg_attr(feature = "sqlx", sqlx(rename = "type"))]
|
||||||
|
pub invite_type: Option<InviteType>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub inviter: Option<User>,
|
pub inviter: Option<User>,
|
||||||
pub max_age: Option<i32>,
|
pub max_age: Option<u32>,
|
||||||
pub max_uses: Option<i32>,
|
pub max_uses: Option<u8>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub stage_instance: Option<InviteStageInstance>,
|
pub stage_instance: Option<InviteStageInstance>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub target_application: Option<Application>,
|
pub target_application: Option<Application>,
|
||||||
pub target_type: Option<i32>,
|
#[cfg_attr(feature = "sqlx", sqlx(rename = "target_user_type"))]
|
||||||
|
pub target_type: Option<InviteTargetType>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub target_user: Option<User>,
|
pub target_user: Option<User>,
|
||||||
pub temporary: Option<bool>,
|
pub temporary: Option<bool>,
|
||||||
pub uses: Option<i32>,
|
pub uses: Option<i32>,
|
||||||
|
|
|
@ -21,6 +21,9 @@ pub enum Error {
|
||||||
|
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
Guild(#[from] GuildError),
|
Guild(#[from] GuildError),
|
||||||
|
|
||||||
|
#[error("Invalid flags value: {0}")]
|
||||||
|
InvalidFlags(u64)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq, thiserror::Error)]
|
#[derive(Debug, PartialEq, Eq, thiserror::Error)]
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
use bitflags::bitflags;
|
use bitflags::bitflags;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
use serde::de::Visitor;
|
||||||
|
|
||||||
use crate::types::ChannelType;
|
use crate::types::{ChannelType, DefaultReaction, Error, entities::PermissionOverwrite, Snowflake};
|
||||||
use crate::types::{entities::PermissionOverwrite, Snowflake};
|
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Default, PartialEq, PartialOrd)]
|
#[derive(Debug, Deserialize, Serialize, Default, PartialEq, PartialOrd)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
|
@ -48,7 +48,7 @@ pub struct ChannelModifySchema {
|
||||||
pub nsfw: Option<bool>,
|
pub nsfw: Option<bool>,
|
||||||
pub rtc_region: Option<String>,
|
pub rtc_region: Option<String>,
|
||||||
pub default_auto_archive_duration: Option<i32>,
|
pub default_auto_archive_duration: Option<i32>,
|
||||||
pub default_reaction_emoji: Option<String>,
|
pub default_reaction_emoji: Option<DefaultReaction>,
|
||||||
pub flags: Option<i32>,
|
pub flags: Option<i32>,
|
||||||
pub default_thread_rate_limit_per_user: Option<i32>,
|
pub default_thread_rate_limit_per_user: Option<i32>,
|
||||||
pub video_quality_mode: Option<i32>,
|
pub video_quality_mode: Option<i32>,
|
||||||
|
@ -109,7 +109,7 @@ pub struct CreateChannelInviteSchema {
|
||||||
pub temporary: Option<bool>,
|
pub temporary: Option<bool>,
|
||||||
pub unique: Option<bool>,
|
pub unique: Option<bool>,
|
||||||
pub validate: Option<String>,
|
pub validate: Option<String>,
|
||||||
pub target_type: Option<InviteType>,
|
pub target_type: Option<InviteTargetType>,
|
||||||
pub target_user_id: Option<Snowflake>,
|
pub target_user_id: Option<Snowflake>,
|
||||||
pub target_application_id: Option<Snowflake>,
|
pub target_application_id: Option<Snowflake>,
|
||||||
}
|
}
|
||||||
|
@ -131,15 +131,79 @@ impl Default for CreateChannelInviteSchema {
|
||||||
}
|
}
|
||||||
|
|
||||||
bitflags! {
|
bitflags! {
|
||||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, PartialOrd, Ord)]
|
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
|
||||||
pub struct InviteFlags: u64 {
|
pub struct InviteFlags: u64 {
|
||||||
const GUEST = 1 << 0;
|
const GUEST = 1 << 0;
|
||||||
|
const VIEWED = 1 << 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Serialize for InviteFlags {
|
||||||
|
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
|
||||||
|
self.bits().to_string().serialize(serializer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> Deserialize<'de> for InviteFlags {
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> {
|
||||||
|
struct FlagsVisitor;
|
||||||
|
|
||||||
|
impl<'de> Visitor<'de> for FlagsVisitor
|
||||||
|
{
|
||||||
|
type Value = InviteFlags;
|
||||||
|
|
||||||
|
fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
formatter.write_str("a raw u64 value of flags")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_u64<E: serde::de::Error>(self, v: u64) -> Result<Self::Value, E> {
|
||||||
|
InviteFlags::from_bits(v).ok_or(serde::de::Error::custom(Error::InvalidFlags(v)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deserializer.deserialize_u64(FlagsVisitor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
impl sqlx::Type<sqlx::MySql> for InviteFlags {
|
||||||
|
fn type_info() -> sqlx::mysql::MySqlTypeInfo {
|
||||||
|
u64::type_info()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
impl<'q> sqlx::Encode<'q, sqlx::MySql> for InviteFlags {
|
||||||
|
fn encode_by_ref(&self, buf: &mut <sqlx::MySql as sqlx::database::HasArguments<'q>>::ArgumentBuffer) -> sqlx::encode::IsNull {
|
||||||
|
u64::encode_by_ref(&self.0.0, buf)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
impl<'r> sqlx::Decode<'r, sqlx::MySql> for InviteFlags {
|
||||||
|
fn decode(value: <sqlx::MySql as sqlx::database::HasValueRef<'r>>::ValueRef) -> Result<Self, sqlx::error::BoxDynError> {
|
||||||
|
let raw = u64::decode(value)?;
|
||||||
|
|
||||||
|
Ok(Self::from_bits(raw).unwrap())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Clone, Copy, Default, PartialOrd, Ord, PartialEq, Eq)]
|
#[derive(Debug, Deserialize, Serialize, Clone, Copy, Default, PartialOrd, Ord, PartialEq, Eq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
|
||||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||||
|
#[repr(u8)]
|
||||||
pub enum InviteType {
|
pub enum InviteType {
|
||||||
|
#[default]
|
||||||
|
Guild = 0,
|
||||||
|
GroupDm = 1,
|
||||||
|
Friend = 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, Serialize, Clone, Copy, Default, PartialOrd, Ord, PartialEq, Eq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
|
||||||
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||||
|
#[repr(u8)]
|
||||||
|
pub enum InviteTargetType {
|
||||||
#[default]
|
#[default]
|
||||||
Stream = 1,
|
Stream = 1,
|
||||||
EmbeddedApplication = 2,
|
EmbeddedApplication = 2,
|
||||||
|
|
Loading…
Reference in New Issue