Make UserFlags deserialize from string

This commit is contained in:
Quat3rnion 2024-06-07 14:08:47 -04:00
parent 9bd55b9b5f
commit 590a6d6828
1 changed files with 26 additions and 2 deletions

View File

@ -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>,