From ccfcfa109848c2844759f7da73cc851e2760a3dd Mon Sep 17 00:00:00 2001 From: John Spray Date: Wed, 9 Aug 2023 16:25:25 +0100 Subject: [PATCH] remote_storage: implement Serialize/Deserialize for RemotePath --- libs/remote_storage/src/lib.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/libs/remote_storage/src/lib.rs b/libs/remote_storage/src/lib.rs index 1ddd156a08..a810f09787 100644 --- a/libs/remote_storage/src/lib.rs +++ b/libs/remote_storage/src/lib.rs @@ -20,6 +20,7 @@ use std::{ use anyhow::{bail, Context}; +use serde::{Deserialize, Serialize}; use tokio::io; use toml_edit::Item; use tracing::info; @@ -50,6 +51,25 @@ const REMOTE_STORAGE_PREFIX_SEPARATOR: char = '/'; #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct RemotePath(PathBuf); +impl Serialize for RemotePath { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + serializer.collect_str(self) + } +} + +impl<'de> Deserialize<'de> for RemotePath { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + let str = String::deserialize(deserializer)?; + Ok(Self(PathBuf::from(&str))) + } +} + impl std::fmt::Display for RemotePath { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.0.display())