Function deserialize_custom_strings::deserialize_u64[][src]

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);