From 4def46745d66e1e7af7bf52264bc6e2d56f699fc Mon Sep 17 00:00:00 2001 From: Florian Briand Date: Tue, 30 Jul 2024 15:53:19 +0200 Subject: [PATCH] feat: add read_element function for raw bloc or field parsing --- crates/sesam-vitale/src/ssv_memory.rs | 46 +++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/crates/sesam-vitale/src/ssv_memory.rs b/crates/sesam-vitale/src/ssv_memory.rs index 1031ec2..c20acd6 100644 --- a/crates/sesam-vitale/src/ssv_memory.rs +++ b/crates/sesam-vitale/src/ssv_memory.rs @@ -54,6 +54,20 @@ pub fn read_element_size(bytes: &[u8]) -> Result, +} + +pub fn read_element(bytes: &[u8]) -> Element { + let ElementSize { size, pad } = read_element_size(bytes).unwrap(); + let contenu = bytes[pad..pad+size].to_vec(); + Element { + pad: pad+size, + contenu, + } +} + #[cfg(test)] mod test_read_element_size { use super::*; @@ -117,3 +131,35 @@ mod test_read_element_size { ); } } + +#[cfg(test)] +mod test_read_element { + use super::*; + + #[test] + fn short_size() { + let bytes = [51, + 1, 48, 1, 56, 11, 57, 57, 55, 48, 48, + 53, 50, 52, 49, 57, 52, 1, 52, 2, 50, + 50, 17, 80, 72, 65, 82, 77, 65, 67, 73, + 69, 78, 48, 48, 53, 50, 52, 49, 57, 9, + 70, 82, 65, 78, 67, 79, 73, 83, 69, 1, + 84, + ]; + let element = read_element(&bytes); + assert_eq!(element.pad, 52); + assert_eq!(element.contenu[..5], [1, 48, 1, 56, 11]); + } + + #[test] + fn long_size() { + let mut bytes = vec![0b_1000_0010_u8, + 0b_0000_0001_u8, 0b_0000_0000_u8, // size = 256 + ]; + // Add 256 bytes to the content + bytes.append(&mut vec![1; 256]); + let element = read_element(&bytes); + assert_eq!(element.pad, 259); + assert_eq!(element.contenu.len(), 256); + } +} \ No newline at end of file