impl Serialize and Deserialize for ShString

This commit is contained in:
Pantonshire committed 2022-06-02 22:08:58 +01:00
1 parent c077cdf610
commit 56179ac613
3 files changed
+46

No files matched your search

+3
View File
@@ -2,3 +2,6 @@
name = "libshire"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = { version = "1", optional = true }
+21
View File
@@ -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>),
+22
View File
@@ -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),