net_file/file/
files.rs

1use std::fs::File;
2use std::io::Read;
3use std::path::PathBuf;
4
5use subprocess::{Exec, ExitStatus};
6use walkdir::WalkDir;
7
8pub struct Files;
9
10impl Files {
11    pub fn read_string(path: &str) -> String {
12        let mut f = File::open(path).unwrap();
13        let mut content = String::new();
14        f.read_to_string(&mut content).unwrap();
15
16        content
17    }
18
19    pub fn read_vector(path: &str) -> Vec<u8> {
20        let mut f = File::open(path).unwrap();
21        let mut buffer = Vec::new();
22        f.read_to_end(&mut buffer).unwrap();
23
24        buffer
25    }
26
27    pub fn find_files(path_buf: &PathBuf, extension: &str) -> Vec<PathBuf> {
28        WalkDir::new(path_buf)
29            .into_iter()
30            .take_while(|entry| entry.is_ok())
31            .map(|entry| { entry.unwrap() })
32            .filter(|entry| { entry.file_type().is_file() && entry.path().extension().map_or(false, |ext| ext == extension) })
33            .map(|entry| { entry.path().to_path_buf() })
34            .collect()
35    }
36
37    pub fn which(app_name: &str) -> ExitStatus {
38        Exec::cmd("which")
39            .arg(app_name)
40            .capture().unwrap().exit_status
41    }
42}
43
44#[cfg(test)]
45mod tests {
46    use crate::test_resources;
47
48    use super::*;
49
50    #[test]
51    fn expected_read_file_as_binary() {
52        let buf = Files::read_vector(test_resources!("captures/arp.pcap"));
53
54        println!("full packet {:?}", buf);
55        assert_eq!(buf.len(), 70);
56
57        let global_header = &buf[..24];
58        println!("global header {:?}", global_header);
59        assert_eq!(global_header.len(), 24);
60
61        let packet_header = &buf[24..40];
62        println!("packet header {:?}", packet_header);
63        assert_eq!(packet_header.len(), 16);
64
65        let ethernet_header = &buf[40..54];
66        println!("ethernet header {:?}", ethernet_header);
67    }
68
69    #[test]
70    fn expected_read_file_string() {
71        let content = Files::read_string(test_resources!("captures/arp.json"));
72
73        println!("full packet {:?}", content);
74        assert_eq!(content.len(), 1833);
75    }
76}