Correctly serializing cache

This commit is contained in:
daladim 2021-04-13 23:19:41 +02:00
parent 65da7b34cf
commit a2f227e73b
2 changed files with 45 additions and 4 deletions

View file

@ -3,7 +3,7 @@
use std::fmt::{Display, Formatter};
use std::str::FromStr;
use serde::{Deserialize, Serialize};
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use url::Url;
use crate::resource::Resource;
@ -98,7 +98,7 @@ impl Item {
}
#[derive(Clone, Debug, PartialEq, Hash, Serialize, Deserialize)]
#[derive(Clone, Debug, PartialEq, Hash)]
pub struct ItemId {
content: Url,
}
@ -139,6 +139,27 @@ impl Display for ItemId {
}
}
/// Used to support serde
impl Serialize for ItemId {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_str(self.content.as_str())
}
}
/// Used to support serde
impl<'de> Deserialize<'de> for ItemId {
fn deserialize<D>(deserializer: D) -> Result<ItemId, D::Error>
where
D: Deserializer<'de>,
{
let u = Url::deserialize(deserializer)?;
Ok(ItemId{ content: u })
}
}
/// A VersionTag is basically a CalDAV `ctag` or `etag`. Whenever it changes, this means the data has changed.
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]