Buttplug sex toy control library
1use std::ops::RangeInclusive;
2
3use serde::{Serialize, Serializer, ser::SerializeSeq};
4
5pub fn option_range_serialize<S, T>(
6 range: &Option<RangeInclusive<T>>,
7 serializer: S,
8) -> Result<S::Ok, S::Error>
9where
10 S: Serializer,
11 T: Serialize,
12{
13 if let Some(r) = range {
14 range_serialize(r, serializer)
15 } else {
16 core::option::Option::None::<T>.serialize(serializer)
17 }
18}
19
20pub fn range_serialize<S, T>(range: &RangeInclusive<T>, serializer: S) -> Result<S::Ok, S::Error>
21where
22 S: Serializer,
23 T: Serialize,
24{
25 let mut seq = serializer.serialize_seq(Some(2))?;
26 seq.serialize_element(&range.start())?;
27 seq.serialize_element(&range.end())?;
28 seq.end()
29}
30
31pub fn range_sequence_serialize<S, T>(
32 range_vec: &Vec<RangeInclusive<T>>,
33 serializer: S,
34) -> Result<S::Ok, S::Error>
35where
36 S: Serializer,
37 T: Serialize + Copy + Clone,
38{
39 let mut seq = serializer.serialize_seq(Some(range_vec.len()))?;
40 for range in range_vec {
41 seq.serialize_element(&vec![*range.start(), *range.end()])?;
42 }
43 seq.end()
44}