Maybe fix tests, make UserFlags able to be deserialized from String or u64

This commit is contained in:
Quat3rnion 2024-06-18 08:46:07 -04:00
parent d7de1d2fb7
commit c9a36ce725
2 changed files with 20 additions and 3 deletions

View File

@ -155,7 +155,8 @@ impl Serialize for UserFlags {
impl<'de> Deserialize<'de> for UserFlags { impl<'de> Deserialize<'de> for UserFlags {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de> { 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)?; // let s = String::deserialize(deserializer)?.parse::<u64>().map_err(serde::de::Error::custom)?;
let s = crate::types::serde::string_or_u64(deserializer)?;
Ok(UserFlags::from_bits(s).unwrap()) Ok(UserFlags::from_bits(s).unwrap())
} }

View File

@ -1,6 +1,7 @@
use core::fmt; use core::fmt;
use chrono::{LocalResult, NaiveDateTime}; use chrono::{LocalResult, NaiveDateTime};
use serde::de; use serde::{de, Deserialize, Deserializer};
use serde::de::Error;
#[doc(hidden)] #[doc(hidden)]
#[derive(Debug)] #[derive(Debug)]
@ -260,3 +261,18 @@ pub(crate) fn serde_from<T, E, V>(me: LocalResult<T>, _ts: &V) -> Result<T, E>
LocalResult::Single(val) => Ok(val), LocalResult::Single(val) => Ok(val),
} }
} }
#[derive(serde::Deserialize, serde::Serialize)]
#[serde(untagged)]
enum StringOrU64 {
String(String),
U64(u64),
}
pub fn string_or_u64<'de, D>(d: D) -> Result<u64, D::Error>
where D: Deserializer<'de> {
match StringOrU64::deserialize(d)? {
StringOrU64::String(s) => s.parse::<u64>().map_err(D::Error::custom),
StringOrU64::U64(u) => Ok(u)
}
}