use serde::{Deserialize, Deserializer, Serialize, Serializer}; use serde_with::{serde_as, DeserializeAs, DisplayFromStr, SerializeAs}; #[serde_as] #[derive(Deserialize, Serialize)] pub struct Range { #[serde_as(as = "DisplayFromStr")] start: u32, #[serde_as(as = "DisplayFromStr")] end: u32, } impl<'de> DeserializeAs<'de, std::ops::Range> for Range { fn deserialize_as(deserializer: D) -> Result, D::Error> where D: Deserializer<'de>, { let range = Range::deserialize(deserializer)?; Ok(std::ops::Range { start: range.start, end: range.end, }) } } impl SerializeAs> for Range { fn serialize_as( &std::ops::Range { start, end }: &std::ops::Range, serializer: S, ) -> Result<::Ok, ::Error> where S: Serializer, { Range { start, end }.serialize(serializer) } }