spotifyio/crates/model/src/custom_serde.rs

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),
}
}
}