Module serde_with::rust::maps_duplicate_key_is_error
source · [−]Expand description
Ensure no duplicate keys exist in a map.
By default serde has a last-value-wins implementation, if duplicate keys for a map exist. Sometimes it is desirable to know when such an event happens, as the first value is overwritten and it can indicate an error in the serialized data.
This helper returns an error if two identical keys exist in a map.
The implementation supports both the HashMap
and the BTreeMap
from the standard library.
Example
#[derive(Deserialize)]
struct Doc {
#[serde(with = "::serde_with::rust::maps_duplicate_key_is_error")]
map: HashMap<usize, usize>,
}
// Maps are serialized normally,
let s = r#"{"map": {"1": 1, "2": 2, "3": 3}}"#;
let mut v = Doc {
map: HashMap::new(),
};
v.map.insert(1, 1);
v.map.insert(2, 2);
v.map.insert(3, 3);
assert_eq!(v, serde_json::from_str(s).unwrap());
// but create an error if duplicate keys, like the `1`, exist.
let s = r#"{"map": {"1": 1, "2": 2, "1": 3}}"#;
let res: Result<Doc, _> = serde_json::from_str(s);
assert!(res.is_err());
Functions
Deserialize a map and return an error on duplicate keys
Serialize the map with the default serializer