34 lines
972 B
Rust
34 lines
972 B
Rust
//! Custom serialization methods used throughout the crate
|
|
|
|
/// Deserialize/Serialize `Modality` to integer(0, 1, -1).
|
|
pub mod modality {
|
|
use crate::Modality;
|
|
use serde::{de, Deserialize, Serializer};
|
|
|
|
pub fn deserialize<'de, D>(d: D) -> Result<Modality, D::Error>
|
|
where
|
|
D: de::Deserializer<'de>,
|
|
{
|
|
let v = i8::deserialize(d)?;
|
|
match v {
|
|
0 => Ok(Modality::Minor),
|
|
1 => Ok(Modality::Major),
|
|
-1 => Ok(Modality::NoResult),
|
|
_ => Err(de::Error::invalid_value(
|
|
de::Unexpected::Signed(v.into()),
|
|
&"valid value: 0, 1, -1",
|
|
)),
|
|
}
|
|
}
|
|
|
|
pub fn serialize<S>(x: &Modality, s: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
match x {
|
|
Modality::Minor => s.serialize_i8(0),
|
|
Modality::Major => s.serialize_i8(1),
|
|
Modality::NoResult => s.serialize_i8(-1),
|
|
}
|
|
}
|
|
}
|