v0.1.1: refactor of main

This commit is contained in:
AJ ONeal 2018-09-18 00:24:00 -06:00
parent fa301ca9f1
commit e72fab8dd1
1 changed files with 32 additions and 11 deletions

View File

@ -3,6 +3,8 @@ extern crate grep;
use std::env; use std::env;
use std::fs::File; use std::fs::File;
use std::io::prelude::*; use std::io::prelude::*;
use std::process;
use std::error::Error;
struct Config { struct Config {
query: String, query: String,
@ -12,27 +14,46 @@ struct Config {
fn main() { fn main() {
let args: Vec<String> = env::args().collect(); let args: Vec<String> = env::args().collect();
let conf = parse_config(&args); let conf = Config::new(&args).unwrap_or_else(|err| {
println!("Problem parsing arguments: {}", err);
process::exit(1);
});
//let filename = &conf.filename.clone();
if let Err(e) = run(conf) {
println!("Big bad bada boom!\n{:?}", e);
//println!("Big bad bada boom!\n{:?}", e.kind());
//println!("Big bad bada boom!\n{}", e.description());
process::exit(1);
}
}
//fn run(conf: Config) -> Result<(), Box<std::io::Error>>
fn run(conf: Config) -> Result<(), Box<Error>> {
println!("{:?} {:?}", conf.query, conf.filename); println!("{:?} {:?}", conf.query, conf.filename);
let mut f = File::open(&conf.filename).expect(&("file not found: ".to_owned() + &conf.filename)); let mut f = File::open(&conf.filename)?;
//let mut f = File::open(filename).expect(&format!("file not found: {}", &filename));
let mut contents = String::new(); let mut contents = String::new();
f.read_to_string(&mut contents) f.read_to_string(&mut contents)?;
.expect("something went wrong reading the file");
println!("Searching for '{}'", conf.query); println!("Searching for '{}'", conf.query);
println!("In file '{}'", conf.filename); println!("In file '{}'", conf.filename);
println!("With text:\n{}", contents); println!("With text:\n{}", contents);
Ok(())
} }
//fn parse_config(args: &[String]) -> (&String, &String) impl Config {
//fn parse_config(args: &[String]) -> (&str, &str) fn new(args: &[String]) -> Result<Config, &'static str> {
fn parse_config(args: &[String]) -> Config { if args.len() < 3 {
Config { return Err("too few arguments")
}
Ok(Config {
query: args[1].clone(), query: args[1].clone(),
filename: args[2].clone(), filename: args[2].clone(),
})
} }
} }