Buttplug sex toy control library
at dev 1.0 kB view raw
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}