falco_event/types/
bytebuf.rs1use crate::fields::{FromBytes, FromBytesError, ToBytes};
2use std::io::Write;
3
4impl<'a> FromBytes<'a> for &'a [u8] {
5 #[inline]
6 fn from_bytes(buf: &mut &'a [u8]) -> Result<Self, FromBytesError> {
7 Ok(std::mem::take(buf))
8 }
9}
10
11impl ToBytes for &[u8] {
12 #[inline]
13 fn binary_size(&self) -> usize {
14 self.len()
15 }
16
17 #[inline]
18 fn write<W: Write>(&self, mut writer: W) -> std::io::Result<()> {
19 writer.write_all(self)
20 }
21
22 #[inline]
23 fn default_repr() -> impl ToBytes {
24 &[] as &[u8]
25 }
26}
27
28#[cfg(test)]
29mod tests {
30 use crate::fields::{FromBytes, ToBytes};
31
32 #[test]
33 fn test_bytebuf() {
34 let data = b"foo".as_slice();
35 let mut binary = Vec::new();
36
37 data.write(&mut binary).unwrap();
38 println!("{binary:02x?}");
39
40 assert_eq!(binary.as_slice(), "foo".as_bytes());
41
42 let mut buf = binary.as_slice();
43 let loaded = <&[u8]>::from_bytes(&mut buf).unwrap();
44 assert_eq!(loaded, "foo".as_bytes());
45 }
46
47 #[test]
48 fn test_bytebuf_inner_nul() {
49 let data = b"f\0oo".as_slice();
50 let mut binary = Vec::new();
51
52 data.write(&mut binary).unwrap();
53 println!("{binary:02x?}");
54
55 assert_eq!(binary.as_slice(), "f\0oo".as_bytes());
56
57 let mut buf = binary.as_slice();
58 let loaded = <&[u8]>::from_bytes(&mut buf).unwrap();
59 assert_eq!(loaded, "f\0oo".as_bytes());
60 }
61}