[][src]Module serde_with::rust::hashmap_as_tuple_list

De/Serialize a HashMap into a list of tuples

Some formats, like JSON, have limitations on the type of keys for maps. In case of JSON, keys are restricted to strings. Rust features more powerfull keys, for example tuple, which can not be serialized to JSON.

This helper serializes the HashMap into a list of tuples, which does not have the same type restrictions.

If you need to de/serialize a BTreeMap then use btreemap_as_tuple_list.

Examples

#[derive(Deserialize, Serialize)]
struct A {
    #[serde(with = "serde_with::rust::hashmap_as_tuple_list")]
    s: HashMap<(String, u32), u32>,
}

let v: A = serde_json::from_value(json!({
    "s": [
        [["Hello", 123], 0],
        [["World", 456], 1]
    ]
})).unwrap();

assert_eq!(2, v.s.len());
assert_eq!(1, v.s[&("World".to_string(), 456)]);

The helper is generic over the hasher type of the HashMap and works with different variants, such as FnvHashMap.

use fnv::FnvHashMap;

#[derive(Deserialize, Serialize)]
struct A {
    #[serde(with = "serde_with::rust::hashmap_as_tuple_list")]
    s: FnvHashMap<u32, bool>,
}

let v: A = serde_json::from_value(json!({
    "s": [
        [0, false],
        [1, true]
    ]
})).unwrap();

assert_eq!(2, v.s.len());
assert_eq!(true, v.s[&1]);

Functions

deserialize

Deserialize a HashMap from a list of tuples

serialize

Serialize the HashMap as a list of tuples