rune/
serde.rs

1pub(crate) mod ordering {
2    use core::cmp::Ordering;
3
4    use serde::{Deserialize, Deserializer, Serializer};
5
6    pub(crate) fn deserialize<'de, D>(deserializer: D) -> Result<Ordering, D::Error>
7    where
8        D: Deserializer<'de>,
9    {
10        match i8::deserialize(deserializer)? {
11            -1 => Ok(Ordering::Less),
12            0 => Ok(Ordering::Equal),
13            1 => Ok(Ordering::Greater),
14            _ => Err(serde::de::Error::custom("invalid ordering")),
15        }
16    }
17
18    pub(crate) fn serialize<S>(ordering: &Ordering, serializer: S) -> Result<S::Ok, S::Error>
19    where
20        S: Serializer,
21    {
22        match ordering {
23            Ordering::Less => serializer.serialize_i8(-1),
24            Ordering::Equal => serializer.serialize_i8(0),
25            Ordering::Greater => serializer.serialize_i8(1),
26        }
27    }
28}