]> git.proxmox.com Git - rustc.git/blob - src/doc/book/listings/ch12-an-io-project/listing-12-12/src/main.rs
New upstream version 1.63.0+dfsg1
[rustc.git] / src / doc / book / listings / ch12-an-io-project / listing-12-12 / src / main.rs
1 use std::env;
2 use std::fs;
3 use std::process;
4 // ANCHOR: here
5 use std::error::Error;
6
7 // --snip--
8
9 // ANCHOR_END: here
10
11 fn main() {
12 let args: Vec<String> = env::args().collect();
13
14 let config = Config::build(&args).unwrap_or_else(|err| {
15 println!("Problem parsing arguments: {err}");
16 process::exit(1);
17 });
18
19 println!("Searching for {}", config.query);
20 println!("In file {}", config.file_path);
21
22 run(config);
23 }
24
25 // ANCHOR: here
26 fn run(config: Config) -> Result<(), Box<dyn Error>> {
27 let contents = fs::read_to_string(config.file_path)?;
28
29 println!("With text:\n{contents}");
30
31 Ok(())
32 }
33 // ANCHOR_END: here
34
35 struct Config {
36 query: String,
37 file_path: String,
38 }
39
40 impl Config {
41 fn build(args: &[String]) -> Result<Config, &'static str> {
42 if args.len() < 3 {
43 return Err("not enough arguments");
44 }
45
46 let query = args[1].clone();
47 let file_path = args[2].clone();
48
49 Ok(Config { query, file_path })
50 }
51 }