123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- use crate::core::Delta;
- use serde::{
- de::{SeqAccess, Visitor},
- ser::SerializeSeq,
- Deserialize,
- Deserializer,
- Serialize,
- Serializer,
- };
- use std::fmt;
- impl Serialize for Delta {
- fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
- 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<D>(deserializer: D) -> Result<Delta, D::Error>
- 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<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
- 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)
- }
- }
|