1use pamoja_core::Result;
4
5use crate::Codec;
6
7#[derive(Clone, Copy, Debug, Default)]
24pub struct BytesCodec;
25
26impl Codec<Vec<u8>> for BytesCodec {
27 fn encode(&self, value: &Vec<u8>) -> Result<Vec<u8>> {
28 Ok(value.clone())
29 }
30
31 fn decode(&self, bytes: &[u8]) -> Result<Vec<u8>> {
32 Ok(bytes.to_vec())
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39
40 #[test]
41 fn round_trips_arbitrary_bytes() {
42 let codec = BytesCodec;
43 let payload = vec![1u8, 2, 3, 255, 0];
44 let encoded = codec.encode(&payload).expect("encode");
45 assert_eq!(encoded, payload);
46 assert_eq!(codec.decode(&encoded).expect("decode"), payload);
47 }
48
49 #[test]
50 fn round_trips_an_empty_buffer() {
51 let codec = BytesCodec;
52 let encoded = codec.encode(&Vec::new()).expect("encode");
53 assert!(encoded.is_empty());
54 assert!(codec.decode(&encoded).expect("decode").is_empty());
55 }
56}