diff options
| author | tv <tv@krebsco.de> | 2026-10-26 22:08:32 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-26 22:14:01 +0100 |
| commit | 5a32e746cf7aec3e4ca76616b6b66f023de53988 (patch) | |
| tree | 9eca1f501d8961a53497c03412c222fd485e76ac /src/transport/wire.rs | |
| parent | 08f5df1f0a2e22876a5b49a4f9e2e05a61df882a (diff) | |
add delta blobs
Diffstat (limited to 'src/transport/wire.rs')
| -rw-r--r-- | src/transport/wire.rs | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/transport/wire.rs b/src/transport/wire.rs index 67d2fb3..009380f 100644 --- a/src/transport/wire.rs +++ b/src/transport/wire.rs @@ -14,7 +14,7 @@ use super::{MessageKind, ParsedMessage}; /// The wire format's version, the first byte of every payload. Bump it with every change /// to a message type or a codec (`golden_bytes` fails then). -pub(crate) const VERSION: u8 = 2; +pub(crate) const VERSION: u8 = 3; /// What the second byte of a payload says. fn tag(kind: MessageKind) -> u8 { @@ -233,6 +233,28 @@ pub(crate) mod codec { } } + /// Change hashes, each a 32-byte binary. + pub(crate) mod change_hashes { + use super::*; + use automerge::ChangeHash; + + pub(crate) fn serialize<S: Serializer>( + value: &[ChangeHash], + s: S, + ) -> Result<S::Ok, S::Error> { + s.collect_seq(value.iter().map(|hash| Bytes::new(&hash.0))) + } + + pub(crate) fn deserialize<'de, D: Deserializer<'de>>( + d: D, + ) -> Result<Vec<ChangeHash>, D::Error> { + Vec::<ByteBuf>::deserialize(d)? + .iter() + .map(|hash| Ok(ChangeHash(fixed(hash, "a change hash")?))) + .collect() + } + } + /// An Automerge sync message, in Automerge's own encoding (left encoded: /// `SyncPayload`). pub(crate) mod sync_message { @@ -416,7 +438,7 @@ mod tests { }); assert_eq!( hex(&encode(&hello).unwrap()), - format!("020097a5737761726d{epoch_hex}01c403010203c3{}07", run("04")) + format!("030097a5737761726d{epoch_hex}01c403010203c3{}07", run("04")) ); let reply = ParsedMessage::HelloReply(HelloReply { @@ -433,7 +455,7 @@ mod tests { assert_eq!( hex(&encode(&reply).unwrap()), format!( - "020199a5737761726d91a170{epoch_hex}01c400c2{}05{}", + "030199a5737761726d91a170{epoch_hex}01c400c2{}05{}", run("04"), run("06") ) @@ -448,7 +470,7 @@ mod tests { }); assert_eq!( hex(&encode(&ping).unwrap()), - format!("0203959290c400{epoch_hex}01c3c2") + format!("0303959290c400{epoch_hex}01c3c2") ); } } |
