stackforge_core/utils/
padding.rs1pub fn pad_to(data: &[u8], min_len: usize) -> Vec<u8> {
5 if data.len() >= min_len {
6 data.to_vec()
7 } else {
8 let mut padded = data.to_vec();
9 padded.resize(min_len, 0);
10 padded
11 }
12}
13
14pub fn align_to(data: &[u8], alignment: usize) -> Vec<u8> {
16 let padded_len = (data.len() + alignment - 1) / alignment * alignment;
17 pad_to(data, padded_len)
18}
19
20pub fn ethernet_min_frame(data: &[u8]) -> Vec<u8> {
22 pad_to(data, 60)
25}
26
27#[cfg(test)]
28mod tests {
29 use super::*;
30
31 #[test]
32 fn test_pad_to() {
33 let data = [1, 2, 3];
34 let padded = pad_to(&data, 6);
35 assert_eq!(padded, vec![1, 2, 3, 0, 0, 0]);
36
37 let padded = pad_to(&data, 2);
39 assert_eq!(padded, vec![1, 2, 3]);
40 }
41
42 #[test]
43 fn test_align_to() {
44 let data = [1, 2, 3, 4, 5];
45 let aligned = align_to(&data, 4);
46 assert_eq!(aligned.len(), 8);
47 assert_eq!(&aligned[..5], &[1, 2, 3, 4, 5]);
48 }
49
50 #[test]
51 fn test_ethernet_min_frame() {
52 let data = vec![0u8; 20];
53 let frame = ethernet_min_frame(&data);
54 assert_eq!(frame.len(), 60);
55 }
56}