serde.rs 928 B

123456789101112131415161718192021222324252627282930
  1. use serde::{Serialize, Serializer};
  2. use std::{fmt::Display, sync::Arc};
  3. pub(crate) fn serialize_error_to_string<S, T>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
  4. where
  5. S: Serializer,
  6. T: ToString + Display,
  7. {
  8. serializer.serialize_str(&value.to_string())
  9. }
  10. /// Serialize an Arc<str> as a string
  11. pub fn serialize_arc_str<S>(value: &Arc<str>, serializer: S) -> Result<S::Ok, S::Error>
  12. where
  13. S: serde::Serializer,
  14. {
  15. // Convert the Arc<str> to a String for serialization
  16. let value_str: String = value.to_string();
  17. serializer.serialize_str(&value_str)
  18. }
  19. /// Deserialize a string as an Arc<str>
  20. pub fn deserialize_arc_str<'de, D>(deserializer: D) -> Result<Arc<str>, D::Error>
  21. where
  22. D: serde::Deserializer<'de>,
  23. {
  24. // Deserialize as a String and then convert it back to an Arc<str>
  25. let value_str: String = serde::Deserialize::deserialize(deserializer)?;
  26. Ok(Arc::from(value_str))
  27. }