v0.1.1: refactor of main
This commit is contained in:
parent
fa301ca9f1
commit
e72fab8dd1
39
src/main.rs
39
src/main.rs
|
@ -3,6 +3,8 @@ extern crate grep;
|
|||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::io::prelude::*;
|
||||
use std::process;
|
||||
use std::error::Error;
|
||||
|
||||
struct Config {
|
||||
query: String,
|
||||
|
@ -12,27 +14,46 @@ struct Config {
|
|||
fn main() {
|
||||
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);
|
||||
|
||||
let mut f = File::open(&conf.filename).expect(&("file not found: ".to_owned() + &conf.filename));
|
||||
//let mut f = File::open(filename).expect(&format!("file not found: {}", &filename));
|
||||
let mut f = File::open(&conf.filename)?;
|
||||
|
||||
let mut contents = String::new();
|
||||
f.read_to_string(&mut contents)
|
||||
.expect("something went wrong reading the file");
|
||||
f.read_to_string(&mut contents)?;
|
||||
|
||||
println!("Searching for '{}'", conf.query);
|
||||
println!("In file '{}'", conf.filename);
|
||||
println!("With text:\n{}", contents);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
//fn parse_config(args: &[String]) -> (&String, &String)
|
||||
//fn parse_config(args: &[String]) -> (&str, &str)
|
||||
fn parse_config(args: &[String]) -> Config {
|
||||
Config {
|
||||
impl Config {
|
||||
fn new(args: &[String]) -> Result<Config, &'static str> {
|
||||
if args.len() < 3 {
|
||||
return Err("too few arguments")
|
||||
}
|
||||
|
||||
Ok(Config {
|
||||
query: args[1].clone(),
|
||||
filename: args[2].clone(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue