ops_serde.rs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. use crate::core::delta::operation::OperationAttributes;
  2. use crate::core::delta::Operations;
  3. use serde::{
  4. de::{SeqAccess, Visitor},
  5. ser::SerializeSeq,
  6. Deserialize, Deserializer, Serialize, Serializer,
  7. };
  8. use std::{fmt, marker::PhantomData};
  9. impl<T> Serialize for Operations<T>
  10. where
  11. T: OperationAttributes + Serialize,
  12. {
  13. fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  14. where
  15. S: Serializer,
  16. {
  17. let mut seq = serializer.serialize_seq(Some(self.ops.len()))?;
  18. for op in self.ops.iter() {
  19. seq.serialize_element(op)?;
  20. }
  21. seq.end()
  22. }
  23. }
  24. impl<'de, T> Deserialize<'de> for Operations<T>
  25. where
  26. T: OperationAttributes + Deserialize<'de>,
  27. {
  28. fn deserialize<D>(deserializer: D) -> Result<Operations<T>, D::Error>
  29. where
  30. D: Deserializer<'de>,
  31. {
  32. struct OperationSeqVisitor<T>(PhantomData<fn() -> T>);
  33. impl<'de, T> Visitor<'de> for OperationSeqVisitor<T>
  34. where
  35. T: OperationAttributes + Deserialize<'de>,
  36. {
  37. type Value = Operations<T>;
  38. fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
  39. formatter.write_str("a sequence")
  40. }
  41. #[inline]
  42. fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
  43. where
  44. A: SeqAccess<'de>,
  45. {
  46. let mut o = Operations::default();
  47. while let Some(op) = seq.next_element()? {
  48. o.add(op);
  49. }
  50. Ok(o)
  51. }
  52. }
  53. deserializer.deserialize_seq(OperationSeqVisitor(PhantomData))
  54. }
  55. }