Make UserFlags deserialize from string
This commit is contained in:
parent
9bd55b9b5f
commit
590a6d6828
|
@ -4,9 +4,11 @@
|
|||
|
||||
use crate::types::utils::Snowflake;
|
||||
use chrono::{DateTime, Utc};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
use serde_aux::prelude::deserialize_option_number_from_string;
|
||||
use std::fmt::Debug;
|
||||
use std::num::ParseIntError;
|
||||
use std::str::FromStr;
|
||||
|
||||
#[cfg(feature = "client")]
|
||||
use crate::gateway::Updateable;
|
||||
|
@ -111,7 +113,7 @@ impl From<User> for PublicUser {
|
|||
const CUSTOM_USER_FLAG_OFFSET: u64 = 1 << 32;
|
||||
|
||||
bitflags::bitflags! {
|
||||
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
#[cfg_attr(feature = "sqlx", derive(chorus_macros::SqlxBitFlags))]
|
||||
pub struct UserFlags: u64 {
|
||||
const DISCORD_EMPLOYEE = 1 << 0;
|
||||
|
@ -137,6 +139,28 @@ bitflags::bitflags! {
|
|||
}
|
||||
}
|
||||
|
||||
impl FromStr for UserFlags {
|
||||
type Err = ParseIntError;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
s.parse::<u64>().map(UserFlags::from_bits).map(|f| f.unwrap_or(UserFlags::empty()))
|
||||
}
|
||||
}
|
||||
|
||||
impl Serialize for UserFlags {
|
||||
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
|
||||
serializer.serialize_str(&self.bits().to_string())
|
||||
}
|
||||
}
|
||||
|
||||
impl<'de> Deserialize<'de> for UserFlags {
|
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> {
|
||||
let s = String::deserialize(deserializer)?.parse::<u64>().map_err(serde::de::Error::custom)?;
|
||||
|
||||
Ok(UserFlags::from_bits(s).unwrap())
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
|
||||
pub struct UserProfileMetadata {
|
||||
pub guild_id: Option<Snowflake>,
|
||||
|
|
Loading…
Reference in New Issue