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