summaryrefslogtreecommitdiffstats
path: root/src/transport/wire.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-26 22:08:32 +0100
committertv <tv@krebsco.de>2026-10-26 22:14:01 +0100
commit5a32e746cf7aec3e4ca76616b6b66f023de53988 (patch)
tree9eca1f501d8961a53497c03412c222fd485e76ac /src/transport/wire.rs
parent08f5df1f0a2e22876a5b49a4f9e2e05a61df882a (diff)
add delta blobs
Diffstat (limited to 'src/transport/wire.rs')
-rw-r--r--src/transport/wire.rs30
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")
);
}
}