1use crate::config;
2use crate::search::string_search_funcs::{search_case_insensitive, search_case_sensitive};
3use std::error::Error;
4use std::fs;
5
6pub fn run_grep(config: &config::GrepCli) -> Result<(), Box<dyn Error>> {
7 let contents = fs::read_to_string(&config.file)?;
8
9 let search_results: Vec<&str> = match config.ignore_case {
10 true => search_case_insensitive(&config.query, &contents),
11 false => search_case_sensitive(&config.query, &contents),
12 };
13
14 let _: Vec<_> = search_results
15 .into_iter()
16 .map(|x| println!("{}", x))
17 .collect();
18
19 Ok(())
20}
21
22pub fn run_cp(config: &config::CpCli) -> Result<(), Box<dyn Error>> {
23 let contents = fs::read_to_string(&config.source)?;
24 fs::write(&config.dest, contents)?;
25 Ok(())
26}
27
28pub fn run_mv(config: &config::CpCli) -> Result<(), Box<dyn Error>> {
29 let contents = fs::read_to_string(&config.source)?;
30 fs::write(&config.dest, contents)?;
31 fs::remove_file(&config.source)?;
32 Ok(())
33}
34
35pub fn run_ls(config: &config::LsCli) -> Result<(), Box<dyn Error>> {
36 if let Ok(entries) = fs::read_dir(&config.dir) {
37 for entry in entries {
38 if let Ok(entry) = entry {
39 if let Ok(metadata) = entry.metadata() {
40 println!("{:?}: {:?}", entry.path(), metadata.permissions());
41 } else {
42 println!("Couldn't get metadata for {:?}", entry.path());
43 }
44 }
45 }
46 }
47 Ok(())
48}
49
50pub fn run_head(config: &config::HeadCli) -> Result<(), Box<dyn Error>> {
51 let contents = fs::read_to_string(&config.file)?;
52
53 for (item, idx) in contents.lines().zip(0u32..) {
54 if &idx < &config.num_lines {
55 println!("{}", item);
56 } else {
57 break;
58 }
59 }
60 Ok(())
61}