voa_config/
common.rs

1//! Common functionality.
2
3use std::collections::HashSet;
4
5use serde::{Serialize, Serializer};
6
7/// Serializes a [`HashSet`] of `T` as an ordered [`Vec`] of `T`.
8pub(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
20/// Returns a [`HashSet`] of `T` as an ordered [`Vec`] of `&T`.
21pub(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
27/// Serializes an [`Option<HashSet>`] of `T` as an ordered [`Option<Vec>`] of `T`.
28pub(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}