pub fn deserialize_u64<'de, D>(deserializer: D) -> Result<u64, D::Error>where
D: Deserializer<'de>,
Expand description
In case you encounter a JSON API that does not return the u64
as a number like you handsome and smart person deserve, but
instead wraps it in a String
, like:
use serde::Deserialize;
use serde_json::{Error, from_str};
#[derive(Deserialize)]
struct Foo {
definetly_a_u64: u64,
}
let json = r#"{
"definetly_a_u64": "0123456789"
}"#;
let foo: Result<Foo, Error> = from_str(json);
assert!(foo.is_err());
Make the above code working with:
use serde::Deserialize;
use serde_json::{Error, from_str};
use deserialize_custom_strings::deserialize_u64;
#[derive(Deserialize)]
struct Foo {
#[serde(deserialize_with = "deserialize_u64")]
definetly_a_u64: u64,
}
let json = r#"{
"definetly_a_u64": "0123456789"
}"#;
let foo: Result<Foo, Error> = from_str(json);
assert!(foo.is_ok());
assert_eq!(foo.unwrap().definetly_a_u64, 123456789);