use serde::{Serialize, Deserialize, Serializer, Deserializer, Error};
use serde::de::Visitor as DeVisitor;
use super::DefaultId;
impl Serialize for DefaultId {
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error>
where S: Serializer,
{
serializer.serialize_str(&self.0[..])
}
}
impl Deserialize for DefaultId {
fn deserialize<D>(deserializer: &mut D) -> Result<Self, D::Error>
where D: Deserializer
{
deserializer.deserialize(DefaultIdVisitor)
}
}
struct DefaultIdVisitor;
impl DeVisitor for DefaultIdVisitor {
type Value = DefaultId;
#[inline]
fn visit_i64<E>(&mut self, v: i64) -> Result<Self::Value, E>
where E: Error,
{
Ok(DefaultId::new(v.to_string()))
}
#[inline]
fn visit_u64<E>(&mut self, v: u64) -> Result<Self::Value, E>
where E: Error,
{
Ok(DefaultId::new(v.to_string()))
}
#[inline]
fn visit_str<E>(&mut self, v: &str) -> Result<Self::Value, E>
where E: Error,
{
self.visit_string(v.into())
}
fn visit_string<E>(&mut self, v: String) -> Result<Self::Value, E>
where E: Error,
{
Ok(DefaultId::new(v))
}
}