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