impl Serialize and Deserialize for ShString

main
Pantonshire 4 years ago
parent c077cdf610
commit 56179ac613

@ -2,3 +2,6 @@
name = "libshire"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = { version = "1", optional = true }

@ -287,6 +287,27 @@ impl<const N: usize> fmt::Display for ShString<N> {
}
}
#[cfg(feature = "serde")]
impl<const N: usize> serde::Serialize for ShString<N> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer
{
serde::Serialize::serialize(&**self, serializer)
}
}
#[cfg(feature = "serde")]
impl<'de, const N: usize> serde::Deserialize<'de> for ShString<N> {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>
{
serde::Deserialize::deserialize(deserializer)
.map(Self::new_from_str)
}
}
#[derive(Clone)]
enum Repr<const N: usize> {
Stack(StackString<N>),

@ -158,6 +158,28 @@ impl fmt::Display for Uuid {
}
}
#[cfg(feature = "serde")]
impl serde::Serialize for Uuid {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer
{
serde::Serialize::serialize(&*self.as_string(), serializer)
}
}
#[cfg(feature = "serde")]
impl<'de> serde::Deserialize<'de> for Uuid {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>
{
let s: &str = serde::Deserialize::deserialize(deserializer)?;
s.parse()
.map_err(serde::de::Error::custom)
}
}
#[derive(Debug)]
pub enum ParseError {
NotEnoughGroups(usize),

Loading…
Cancel
Save