From 85a6165882cd5dd8e4b29d7cc46c9f90db113b43 Mon Sep 17 00:00:00 2001 From: Toby Lawrence Date: Wed, 29 Jan 2025 13:58:04 -0500 Subject: [PATCH] serialize tagsets more directly for more native output structure --- lib/saluki-context/src/tags/mod.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/saluki-context/src/tags/mod.rs b/lib/saluki-context/src/tags/mod.rs index 4d216afa..8b238c8d 100644 --- a/lib/saluki-context/src/tags/mod.rs +++ b/lib/saluki-context/src/tags/mod.rs @@ -2,6 +2,7 @@ use std::{fmt, hash, ops::Deref as _, sync::Arc}; +use serde::Serialize; use stringtheory::MetaString; mod raw; @@ -89,6 +90,15 @@ impl fmt::Display for Tag { } } +impl Serialize for Tag { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + serializer.serialize_str(&self.0) + } +} + impl From for Tag where T: Into, @@ -180,7 +190,7 @@ impl<'a> hash::Hash for BorrowedTag<'a> { } /// A set of tags. -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Default, Serialize)] pub struct TagSet(Vec); impl TagSet { @@ -482,14 +492,12 @@ impl fmt::Display for SharedTagSet { } } -impl serde::Serialize for SharedTagSet { +impl Serialize for SharedTagSet { fn serialize(&self, serializer: S) -> Result where S: serde::Serializer, { - // We have this manual implementation of `Serialize` just to avoid needing to bring in `serde_with` to get the - // helper that utilizes the `Display` implementation. - serializer.collect_str(self) + self.0.deref().serialize(serializer) } }