#[derive(Default)]
pub(crate) struct ResolvedMergeArms {
pub(crate) updates: Vec<(String, Option<u32>, Vec<u8>)>,
pub(crate) deletes: Vec<(String, Option<u32>, Vec<u8>)>,
pub(crate) inserts: Vec<(String, Vec<u8>)>,
}
pub(crate) fn decode_resolve(payload: &[u8]) -> crate::Result<ResolvedMergeArms> {
if payload.is_empty() {
return Ok(ResolvedMergeArms::default());
}
type Wire = (
Vec<(String, Option<u32>, Vec<u8>)>,
Vec<(String, Option<u32>, Vec<u8>)>,
Vec<(String, Vec<u8>)>,
);
let (updates, deletes, inserts): Wire =
zerompk::from_msgpack(payload).map_err(|e| crate::Error::Serialization {
format: "msgpack".into(),
detail: format!("merge resolve rows: {e}"),
})?;
Ok(ResolvedMergeArms {
updates,
deletes,
inserts,
})
}