[][src]Module serde_with::rust::sets_duplicate_value_is_error

Ensure no duplicate values exist in a set.

By default serde has a last-value-wins implementation, if duplicate values for a set 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 values exist in a set.

The implementation supports both the HashSet and the BTreeSet from the standard library.

Example

#[derive(Deserialize)]
struct Doc {
    #[serde(with = "::serde_with::rust::sets_duplicate_value_is_error")]
    set: HashSet<usize>,
}

// Sets are serialized normally,
let s = r#"{"set": [1, 2, 3, 4]}"#;
let v = Doc {
    set: HashSet::from_iter(vec![1, 2, 3, 4]),
};
assert_eq!(v, serde_json::from_str(s).unwrap());

// but create an error if duplicate values, like the `1`, exist.
let s = r#"{"set": [1, 2, 3, 4, 1]}"#;
let res: Result<Doc, _> = serde_json::from_str(s);
assert!(res.is_err());

Functions

deserialize

Deserialize a set and return an error on duplicate values