use serde::{Deserialize, Serialize};
#[derive(
Debug,
Clone,
PartialEq,
Serialize,
Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub(crate) enum CrdtDocOpWalRecord {
Upsert {
collection: String,
document_id: String,
surrogate: u32,
fields_json: String,
partial: bool,
},
Delete {
collection: String,
document_id: String,
surrogate: u32,
},
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn round_trips_upsert() {
let rec = CrdtDocOpWalRecord::Upsert {
collection: "users".to_string(),
document_id: "u1".to_string(),
surrogate: 42,
fields_json: r#"{"a":1,"b":2}"#.to_string(),
partial: false,
};
let bytes = zerompk::to_msgpack_vec(&rec).expect("encode");
let decoded: CrdtDocOpWalRecord = zerompk::from_msgpack(&bytes).expect("decode");
assert_eq!(decoded, rec);
}
#[test]
fn round_trips_delete() {
let rec = CrdtDocOpWalRecord::Delete {
collection: "users".to_string(),
document_id: "u1".to_string(),
surrogate: 7,
};
let bytes = zerompk::to_msgpack_vec(&rec).expect("encode");
let decoded: CrdtDocOpWalRecord = zerompk::from_msgpack(&bytes).expect("decode");
assert_eq!(decoded, rec);
}
}