use crate::WireError;
use crate::codec::{WireDecode, WireEncode};
use bytes::{BufMut, BytesMut};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GetSnapshotResponse {
pub data: Vec<u8>,
}
impl WireEncode for GetSnapshotResponse {
fn encoded_size(&self) -> usize {
self.data.len()
}
fn encode(&self, buf: &mut BytesMut) {
buf.put_slice(&self.data);
}
}
impl WireDecode for GetSnapshotResponse {
fn decode(buf: &[u8]) -> Result<(Self, usize), WireError> {
Ok((Self { data: buf.to_vec() }, buf.len()))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn roundtrip() {
let resp = GetSnapshotResponse {
data: vec![0x50, 0x4B, 0x03, 0x04, 1, 2, 3, 4],
};
let bytes = resp.to_bytes();
let (decoded, consumed) = GetSnapshotResponse::decode(&bytes).unwrap();
assert_eq!(consumed, bytes.len());
assert_eq!(decoded, resp);
}
#[test]
fn empty_snapshot() {
let resp = GetSnapshotResponse { data: vec![] };
let bytes = resp.to_bytes();
assert!(bytes.is_empty());
let (decoded, consumed) = GetSnapshotResponse::decode(&bytes).unwrap();
assert_eq!(consumed, 0);
assert_eq!(decoded, resp);
}
}