mod codec_election;
mod codec_write;
mod discovery;
use crate::sync_codec::ballot::Ballot;
use crate::sync_codec::ids::SyncNodeId;
use crate::sync_codec::wire::{
SyncMessage, decode_beamr_sync_frame, decode_sync_message, encode_beamr_sync_frame,
encode_sync_message,
};
use crate::tree::{Hash, LeafNode, Node};
fn leaf(key: &[u8], value: &[u8]) -> Result<Node, Box<dyn std::error::Error>> {
Ok(Node::Leaf(LeafNode::new(vec![(
key.to_vec(),
value.to_vec(),
)])?))
}
fn sample_hash(key: &[u8], value: &[u8]) -> Result<Hash, Box<dyn std::error::Error>> {
Ok(leaf(key, value)?.hash())
}
fn ballot(counter: u64, node: &str) -> Ballot {
Ballot::new(counter, SyncNodeId::new(node))
}
fn assert_message_round_trips(message: &SyncMessage) -> Result<(), Box<dyn std::error::Error>> {
let payload = encode_sync_message(message)?;
assert_eq!(&decode_sync_message(&payload)?, message);
let frame = encode_beamr_sync_frame(message)?;
assert_eq!(&decode_beamr_sync_frame(&frame)?, message);
Ok(())
}