use core::fmt;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
#[repr(u8)]
#[derive(Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum Version {
One = 1,
Two = 2,
}
impl fmt::Display for Version {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { (*self as u8).fmt(f) }
}
impl fmt::Debug for Version {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fmt::Display::fmt(self, f) }
}
impl Serialize for Version {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
(*self as u8).serialize(serializer)
}
}
impl<'de> Deserialize<'de> for Version {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let v = u8::deserialize(deserializer)?;
match v {
1 => Ok(Version::One),
2 => Ok(Version::Two),
_ => Err(serde::de::Error::custom("Invalid version")),
}
}
}