use std::ops::RangeInclusive; use serde::{Serialize, Serializer, ser::SerializeSeq}; pub fn option_range_serialize( range: &Option>, serializer: S, ) -> Result where S: Serializer, T: Serialize, { if let Some(r) = range { range_serialize(r, serializer) } else { core::option::Option::None::.serialize(serializer) } } pub fn range_serialize(range: &RangeInclusive, serializer: S) -> Result where S: Serializer, T: Serialize, { let mut seq = serializer.serialize_seq(Some(2))?; seq.serialize_element(&range.start())?; seq.serialize_element(&range.end())?; seq.end() } pub fn range_sequence_serialize( range_vec: &Vec>, serializer: S, ) -> Result where S: Serializer, T: Serialize + Copy + Clone, { let mut seq = serializer.serialize_seq(Some(range_vec.len()))?; for range in range_vec { seq.serialize_element(&vec![*range.start(), *range.end()])?; } seq.end() }