1use std::collections::HashSet;
4
5use serde::{Serialize, Serializer};
6
7pub(crate) fn ordered_set<S, T: Ord + Serialize>(
9 value: &HashSet<T>,
10 serializer: S,
11) -> Result<S::Ok, S::Error>
12where
13 S: Serializer,
14{
15 let mut ordered: Vec<_> = value.iter().collect();
16 ordered.sort();
17 ordered.serialize(serializer)
18}
19
20pub(crate) fn set_to_vec<T: Ord>(value: &HashSet<T>) -> Vec<&T> {
22 let mut ordered: Vec<_> = value.iter().collect();
23 ordered.sort();
24 ordered
25}
26
27pub(crate) fn ordered_option_set<S, T: Ord + Serialize>(
29 value: &Option<HashSet<T>>,
30 serializer: S,
31) -> Result<S::Ok, S::Error>
32where
33 S: Serializer,
34{
35 if let Some(value) = value {
36 let mut ordered: Vec<_> = value.iter().collect();
37 ordered.sort();
38 Some(ordered).serialize(serializer)
39 } else {
40 (None as Option<&HashSet<T>>).serialize(serializer)
41 }
42}