use crate::core::Delta; use serde::{ de::{SeqAccess, Visitor}, ser::SerializeSeq, Deserialize, Deserializer, Serialize, Serializer, }; use std::fmt; impl Serialize for Delta { fn serialize(&self, serializer: S) -> Result where S: Serializer, { let mut seq = serializer.serialize_seq(Some(self.ops.len()))?; for op in self.ops.iter() { seq.serialize_element(op)?; } seq.end() } } impl<'de> Deserialize<'de> for Delta { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de>, { struct OperationSeqVisitor; impl<'de> Visitor<'de> for OperationSeqVisitor { type Value = Delta; fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { formatter.write_str("a sequence") } fn visit_seq(self, mut seq: A) -> Result where A: SeqAccess<'de>, { let mut o = Delta::default(); while let Some(op) = seq.next_element()? { o.add(op); } Ok(o) } } deserializer.deserialize_seq(OperationSeqVisitor) } }