use serde::{Serialize, Serializer}; use std::{fmt::Display, sync::Arc}; pub(crate) fn serialize_error_to_string(value: &T, serializer: S) -> Result where S: Serializer, T: ToString + Display, { serializer.serialize_str(&value.to_string()) } /// Serialize an Arc as a string pub fn serialize_arc_str(value: &Arc, serializer: S) -> Result where S: serde::Serializer, { // Convert the Arc to a String for serialization let value_str: String = value.to_string(); serializer.serialize_str(&value_str) } /// Deserialize a string as an Arc pub fn deserialize_arc_str<'de, D>(deserializer: D) -> Result, D::Error> where D: serde::Deserializer<'de>, { // Deserialize as a String and then convert it back to an Arc let value_str: String = serde::Deserialize::deserialize(deserializer)?; Ok(Arc::from(value_str)) }