Maybe fix tests, make UserFlags able to be deserialized from String or u64
This commit is contained in:
parent
d7de1d2fb7
commit
c9a36ce725
|
@ -155,7 +155,8 @@ impl Serialize for UserFlags {
|
|||
|
||||
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)?;
|
||||
// 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())
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
use core::fmt;
|
||||
use chrono::{LocalResult, NaiveDateTime};
|
||||
use serde::de;
|
||||
use serde::{de, Deserialize, Deserializer};
|
||||
use serde::de::Error;
|
||||
|
||||
#[doc(hidden)]
|
||||
#[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),
|
||||
}
|
||||
}
|
||||
|
||||
#[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)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue