serde-ordered-collections
A serialization function, intended for use with serde_derive's serialize_with
annotation, which sorts the entries in a map- or list-like structure during
serialization according to the key's Ord implementation.
This library supports anything implementing IntoIterator<Item = (K, V)> for
K: Ord, or IntoIterator<Item = V> for V: Ord. Examples include std::collections::HashMap
and std::collections::HashSet, respectively.
In addition to producing a sorted list, which may be convenient for human
consumption, this also ensures that the serialized output is deterministic.
HashMap/HashSet, by default, will be ordered non-deterministically due to
its implicit random seeding; this makes it inappropriate when consistent output
matters.
Usage
Add the following annotation to your HashMap (or other map-like) field:
Or the equivalent for a HashSet (or list-like):
If you were previously serializing a plain HashMap rather than a custom type,
the easiest way to use this helper is to wrap your HashMap in a new
single-field struct and then apply flatten as follows:
Complete example using HashMap
use HashMap;
use ;
let sample_instance = SampleData ;
let serialized_string = to_string.unwrap;
assert_eq!;