diff options
-rw-r--r-- | minigrep/.gitignore | 3 | ||||
-rw-r--r-- | minigrep/src/main.rs | 39 |
2 files changed, 41 insertions, 1 deletions
diff --git a/minigrep/.gitignore b/minigrep/.gitignore new file mode 100644 index 0000000..12847b6 --- /dev/null +++ b/minigrep/.gitignore @@ -0,0 +1,3 @@ +target/ +Cargo.lock +*.txt diff --git a/minigrep/src/main.rs b/minigrep/src/main.rs index e7a11a9..1e04b5e 100644 --- a/minigrep/src/main.rs +++ b/minigrep/src/main.rs @@ -1,3 +1,40 @@ +use std::process; +use std::env; +use std::fs; + fn main() { - println!("Hello, world!"); + let args: Vec<String> = env::args().collect(); + let config = Config::new(&args).unwrap_or_else(|err| { + println!("Problem parsing arguments: {}", err); + process::exit(1); + }); + + println!("Searching for {}", config.query); + println!("In file {}", config.filename); + + let contents = fs::read_to_string(config.filename) + .expect("something went wrong."); + + dbg!(contents); +} + +struct Config { + query: String, + filename: String, +} + +impl Config { + + + fn new(args: &[String]) -> Result<Config, &'static str> { + + if args.len() < 3 { + panic!("not enough args"); + } + + let query = args[1].clone(); + let filename = args[2].clone(); + Ok(Config { query, filename }) + } + } |