1
0
mirror of https://github.com/jht5945/finding.git synced 2025-12-29 22:20:05 +08:00

use options

This commit is contained in:
2019-07-26 22:20:52 +08:00
parent d18ab025b9
commit f79ee1448a

View File

@@ -60,8 +60,8 @@ fn get_term_width_message(message: &str, left: usize) -> String {
} }
} }
fn find_huge_files(huge_file_size: &String, dir_path: &Path) { fn find_huge_files(options: &Options, dir_path: &Path) {
let huge_file_size_bytes = match parse_size(&huge_file_size) { let huge_file_size_bytes = match parse_size(&options.huge_file_size) {
Err(err) => { Err(err) => {
print_message(MessageType::ERROR, &format!("Parse size failed: {}", err)); print_message(MessageType::ERROR, &format!("Parse size failed: {}", err));
return; return;
@@ -168,21 +168,21 @@ fn match_lines(tag: &str, content: &String, ignore_case: bool, search_text: &Str
} }
} }
fn find_text_files(large_text_file_size: &String, dir_path: &Path, file_ext: &String, ignore_case: bool, search_text: &String) { fn find_text_files(options: &Options, dir_path: &Path) {
if search_text.len() < 1 { if options.search_text.len() < 1 {
print_message(MessageType::ERROR, "Param search_text cannot be empty."); print_message(MessageType::ERROR, "Param search_text cannot be empty.");
return; return;
} }
if ignore_case { if options.ignore_case {
print_message(MessageType::WARN, "Using ignore case mode, highlight print is disabled."); print_message(MessageType::WARN, "Using ignore case mode, highlight print is disabled.");
} }
let file_exts = match file_ext.as_str() { let file_exts = match options.file_ext.as_str() {
"" => vec![], "" => vec![],
ext => { ext => {
ext.split(",").map(|s| s.trim()).filter(|s| s.len() > 0).map(|s| String::from(".") + s).collect() ext.split(",").map(|s| s.trim()).filter(|s| s.len() > 0).map(|s| String::from(".") + s).collect()
}, },
}; };
let large_text_file_size_bytes = match parse_size(&large_text_file_size) { let large_text_file_size_bytes = match parse_size(&options.large_text_file_size) {
Err(err) => { Err(err) => {
print_message(MessageType::ERROR, &format!("Parse size failed: {}", err)); print_message(MessageType::ERROR, &format!("Parse size failed: {}", err));
return; return;
@@ -213,7 +213,7 @@ fn find_text_files(large_text_file_size: &String, dir_path: &Path, file_ext: &St
}, },
Ok(c) => c, Ok(c) => c,
}; };
match_lines(p_str, &file_content, ignore_case, search_text); match_lines(p_str, &file_content, options.ignore_case, &options.search_text);
}, &|p| { }, &|p| {
match p.to_str() { match p.to_str() {
None => (), None => (),
@@ -229,46 +229,58 @@ fn find_text_files(large_text_file_size: &String, dir_path: &Path, file_ext: &St
print_lastline(""); print_lastline("");
} }
struct Options {
version: bool,
target: String,
huge_file_size: String,
large_text_file_size: String,
dir: String,
file_ext: String,
ignore_case: bool,
search_text: String,
}
fn main() { fn main() {
let mut version = false; let mut options = Options {
let mut ignore_case = false; version: false,
let mut target = String::from("text"); target: String::from("text"),
let mut huge_file_size = String::from("100M"); huge_file_size: String::from("100M"),
let mut large_text_file_size = String::from("10M"); large_text_file_size: String::from("10M"),
let mut dir = String::from("."); file_ext: String::new(),
let mut file_ext = String::from(""); ignore_case: false,
let mut search_text = String::new(); dir: String::from("."),
search_text: String::new(),
};
{ {
let mut ap = ArgumentParser::new(); let mut ap = ArgumentParser::new();
ap.set_description("finding - command line find tool."); ap.set_description("finding - command line find tool.");
ap.refer(&mut target).add_option(&["-t", "--target"], Store, "Target, text, huge[file], default text"); ap.refer(&mut options.target).add_option(&["-t", "--target"], Store, "Target, text, huge[file], default text");
ap.refer(&mut dir).add_option(&["-d", "--dir"], Store, "Target directory, default current dir(.)"); ap.refer(&mut options.dir).add_option(&["-d", "--dir"], Store, "Target directory, default current dir(.)");
ap.refer(&mut huge_file_size).add_option(&["--huge-file"], Store, "Huge file size, default 100M"); ap.refer(&mut options.huge_file_size).add_option(&["--huge-file"], Store, "Huge file size, default 100M");
ap.refer(&mut large_text_file_size).add_option(&["--large-text-file"], Store, "Large text file, default 10M"); ap.refer(&mut options.large_text_file_size).add_option(&["--large-text-file"], Store, "Large text file, default 10M");
ap.refer(&mut file_ext).add_option(&["-f", "--file-ext"], Store, "File ext, default all"); ap.refer(&mut options.file_ext).add_option(&["-f", "--file-ext"], Store, "File ext, default all");
ap.refer(&mut ignore_case).add_option(&["-i", "--ignore-case"], StoreTrue, "Ignore case, default false"); ap.refer(&mut options.ignore_case).add_option(&["-i", "--ignore-case"], StoreTrue, "Ignore case, default false");
ap.refer(&mut version).add_option(&["-v", "--version"], StoreTrue, "Print version"); ap.refer(&mut options.version).add_option(&["-v", "--version"], StoreTrue, "Print version");
ap.refer(&mut search_text).add_argument("SEARCH TEXT", Store, "Search text"); ap.refer(&mut options.search_text).add_argument("SEARCH TEXT", Store, "Search text");
ap.parse_args_or_exit(); ap.parse_args_or_exit();
} }
if version { if options.version {
print_version(); print_version();
return; return;
} }
let dir_path = match get_absolute_path(&dir) { let dir_path = match get_absolute_path(&options.dir) {
None => { None => {
print_message(MessageType::ERROR, &format!("Cannot find dir: {}", dir)); print_message(MessageType::ERROR, &format!("Cannot find dir: {}", options.dir));
return; return;
}, },
Some(path) => path, Some(path) => path,
}; };
let start = SystemTime::now(); let start = SystemTime::now();
match target.as_str() { match options.target.as_str() {
"huge" | "hugefile" => find_huge_files(&huge_file_size, &dir_path), "huge" | "hugefile" => find_huge_files(&options, &dir_path),
"text" => find_text_files(&large_text_file_size, &dir_path, &file_ext, ignore_case, &search_text), "text" => find_text_files(&options, &dir_path),
unknown => { unknown => {
print_message(MessageType::ERROR, &format!("Unknown command: {}", unknown)); print_message(MessageType::ERROR, &format!("Unknown command: {}", unknown));
return; return;