use alloc::borrow::Cow;
use core::fmt::Display;
use core::str::FromStr;
use serde::{de::Error as _, Deserialize, Deserializer, Serializer};
use crate::prelude::*;
pub fn deserialize<'de, D, T>(deserializer: D) -> Result<T, D::Error>
where
D: Deserializer<'de>,
T: FromStr + Default,
<T as FromStr>::Err: Display,
{
match <Option<Cow<'_, str>>>::deserialize(deserializer)? {
Some(s) => s.parse::<T>().map_err(D::Error::custom),
None => Ok(T::default()),
}
}
pub fn serialize<S, T>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
T: Display,
{
serializer.serialize_some(&value.to_string())
}