Compare commits
2 Commits
687d2f8000
...
7c7a0cea0f
Author | SHA1 | Date |
---|---|---|
kozabrada123 | 7c7a0cea0f | |
Quat3rnion | d59161619c |
|
@ -3,14 +3,16 @@
|
||||||
// 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 chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Deserializer, Serialize};
|
||||||
use serde_repr::{Deserialize_repr, Serialize_repr};
|
use serde_repr::{Deserialize_repr, Serialize_repr};
|
||||||
use std::fmt::Debug;
|
use std::fmt::{Debug, Formatter};
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
use crate::types::{
|
use crate::types::{
|
||||||
PermissionFlags, Shared,
|
PermissionFlags, Shared,
|
||||||
entities::{GuildMember, User},
|
entities::{GuildMember, User},
|
||||||
utils::Snowflake,
|
utils::Snowflake,
|
||||||
|
serde::string_or_u64
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(feature = "client")]
|
#[cfg(feature = "client")]
|
||||||
|
@ -24,6 +26,8 @@ use crate::gateway::Updateable;
|
||||||
|
|
||||||
#[cfg(feature = "client")]
|
#[cfg(feature = "client")]
|
||||||
use chorus_macros::{observe_option_vec, Composite, Updateable};
|
use chorus_macros::{observe_option_vec, Composite, Updateable};
|
||||||
|
use serde::de::{Error, Visitor};
|
||||||
|
|
||||||
|
|
||||||
#[derive(Default, Debug, Serialize, Deserialize, Clone)]
|
#[derive(Default, Debug, Serialize, Deserialize, Clone)]
|
||||||
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
|
@ -155,7 +159,7 @@ pub struct PermissionOverwrite {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Debug, Serialize_repr, Deserialize_repr, Clone, PartialEq, Eq, PartialOrd)]
|
#[derive(Debug, Serialize_repr, Clone, PartialEq, Eq, PartialOrd)]
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
/// # Reference
|
/// # Reference
|
||||||
pub enum PermissionOverwriteType {
|
pub enum PermissionOverwriteType {
|
||||||
|
@ -163,6 +167,63 @@ pub enum PermissionOverwriteType {
|
||||||
Member = 1,
|
Member = 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<u8> for PermissionOverwriteType {
|
||||||
|
fn from(v: u8) -> Self {
|
||||||
|
match v {
|
||||||
|
0 => PermissionOverwriteType::Role,
|
||||||
|
1 => PermissionOverwriteType::Member,
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FromStr for PermissionOverwriteType {
|
||||||
|
type Err = serde::de::value::Error;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
match s {
|
||||||
|
"role" => Ok(PermissionOverwriteType::Role),
|
||||||
|
"member" => Ok(PermissionOverwriteType::Member),
|
||||||
|
_ => Err(Self::Err::custom("invalid permission overwrite type")),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct PermissionOverwriteTypeVisitor;
|
||||||
|
|
||||||
|
impl<'de> Visitor<'de> for PermissionOverwriteTypeVisitor {
|
||||||
|
type Value = PermissionOverwriteType;
|
||||||
|
|
||||||
|
fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result {
|
||||||
|
formatter.write_str("a valid permission overwrite type")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_u8<E>(self, v: u8) -> Result<Self::Value, E> where E: Error {
|
||||||
|
Ok(PermissionOverwriteType::from(v))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E> where E: Error {
|
||||||
|
self.visit_u8(v as u8)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: Error {
|
||||||
|
PermissionOverwriteType::from_str(v)
|
||||||
|
.map_err(E::custom)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_string<E>(self, v: String) -> Result<Self::Value, E> where E: Error {
|
||||||
|
self.visit_str(v.as_str())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> Deserialize<'de> for PermissionOverwriteType {
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> {
|
||||||
|
let val = deserializer.deserialize_any(PermissionOverwriteTypeVisitor)?;
|
||||||
|
|
||||||
|
Ok(val)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
|
||||||
/// # Reference
|
/// # Reference
|
||||||
/// See <https://discord-userdoccers.vercel.app/resources/channel#thread-metadata-object>
|
/// See <https://discord-userdoccers.vercel.app/resources/channel#thread-metadata-object>
|
||||||
|
|
Loading…
Reference in New Issue