From 8edc7242b0b72853bccb3f1c1c841e81ebb3c6b3 Mon Sep 17 00:00:00 2001 From: tv Date: Mon, 26 Oct 2026 19:45:21 +0100 Subject: decode sync messages lazily Sync messages are now being decoded only where they are applied: after membership has been checked, in the sync lane's blocking task. Debug now shows only the size instead of the whole message. --- src/transport/wire.rs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'src/transport/wire.rs') diff --git a/src/transport/wire.rs b/src/transport/wire.rs index 3c80b11..a0e0f20 100644 --- a/src/transport/wire.rs +++ b/src/transport/wire.rs @@ -233,18 +233,23 @@ pub(crate) mod codec { } } - /// An Automerge sync message, in Automerge's own encoding. + /// An Automerge sync message, in Automerge's own encoding (left encoded: + /// `SyncPayload`). pub(crate) mod sync_message { use super::*; - use automerge::sync::Message; + use crate::transport::SyncPayload; - pub(crate) fn serialize(value: &Message, s: S) -> Result { - Bytes::new(&value.clone().encode()).serialize(s) + pub(crate) fn serialize( + value: &SyncPayload, + s: S, + ) -> Result { + Bytes::new(&value.0).serialize(s) } - pub(crate) fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result { - Message::decode(&ByteBuf::deserialize(d)?) - .map_err(|error| D::Error::custom(format!("Automerge decode failed: {error:?}"))) + pub(crate) fn deserialize<'de, D: Deserializer<'de>>( + d: D, + ) -> Result { + Ok(SyncPayload(ByteBuf::deserialize(d)?.into_vec().into())) } } -- cgit v1.3.1