#[doc(hidden)]
#[macro_export]
macro_rules! __impl_serde_str {
(display $t:ty) => {
impl serde::Serialize for $t {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.collect_str(self)
}
}
$crate::__impl_serde_str!(@de $t);
};
(as_str $t:ty) => {
impl serde::Serialize for $t {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.as_str().serialize(serializer)
}
}
$crate::__impl_serde_str!(@de $t);
};
(@de $t:ty) => {
impl<'de> serde::Deserialize<'de> for $t {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = <std::borrow::Cow<'de, str>>::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
}
}
};
}
#[doc(inline)]
pub use crate::__impl_serde_str as impl_serde_str;