nodedb_cluster/metadata_group/
codec.rs1use crate::error::ClusterError;
10use crate::metadata_group::entry::MetadataEntry;
11use crate::wire_version::{decode_versioned, encode_versioned};
12
13pub fn encode_entry(entry: &MetadataEntry) -> Result<Vec<u8>, ClusterError> {
15 encode_versioned(entry).map_err(|e| ClusterError::Codec {
16 detail: format!("metadata encode: {e}"),
17 })
18}
19
20pub fn decode_entry(data: &[u8]) -> Result<MetadataEntry, ClusterError> {
25 decode_versioned(data).map_err(|e| ClusterError::Codec {
26 detail: format!("metadata decode: {e}"),
27 })
28}
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33 use crate::metadata_group::entry::{MetadataEntry, TopologyChange};
34
35 #[test]
36 fn metadata_entry_versioned_roundtrip() {
37 let entry = MetadataEntry::TopologyChange(TopologyChange::Join {
38 node_id: 42,
39 addr: "127.0.0.1:7001".to_string(),
40 });
41 let bytes = encode_entry(&entry).unwrap();
42 let decoded = decode_entry(&bytes).unwrap();
43 assert_eq!(entry, decoded);
44 }
45}