2021-02-01

Expected struct Config, found () while using process::exit

I'm new to Rust and going through the official book. I'm working on a simple grep example and want to make an exit function which I can use in different places. Unfortunately using this function in a closure in unwrap_or_else causes a compile error. This not clear to me why, because when I use the contents of the function directly in the closure it works.

Here is my main.rs file:

use std::env;
use std::fs;
use std::process;
use std::error::Error;
use std::fmt::Display;

struct Config{
    query: String,
    filename: String,
}

impl Config {
    fn new(input: &[String]) -> Result<Config, &'static str> {
        if input.len() < 3 {
            return Err("Not enough arguments provided.");
        }
        let query = input[1].clone();
        let filename = input[2].clone();

        Ok(Config { query, filename })
    }
}

fn run(cfg: Config) -> Result<(), Box<dyn Error>> {
    let contents = fs::read_to_string(&cfg.filename)?;
    contents.find(&cfg.query).expect("Corrupted text file.");

    Ok(())
}

fn exit<T: Display>(msg: &str, err: T) {
    println!("{}: {}", msg, err);
    process::exit(1);
}

fn main() {
    let args: Vec<String> = env::args().collect();
    println!("{:?}", args);

    let cfg = Config::new(&args).unwrap_or_else(|err| {
        exit("Problem parsing arguments", err);
    });
    
    if let Err(err) = run(cfg) {
        exit("Application error", err);
    }
}

And here is the compile error:

error[E0308]: mismatched types
  --> src\main.rs:41:55
   |
41 |       let cfg = Config::new(&args).unwrap_or_else(|err| {
   |  _______________________________________________________^
42 | |         exit("Problem parsing arguments", err);
43 | |     });
   | |_____^ expected struct `Config`, found `()`

When I change the Config::new(&args).unwrap_or_else closure to this, it works:

let cfg = Config::new(&args).unwrap_or_else(|err| {
    println!("Problem parsing arguments: {}", err);
    process::exit(1);
});


from Recent Questions - Stack Overflow https://ift.tt/3oJeXWN
https://ift.tt/eA8V8J

No comments:

Post a Comment