I have a program that does various simple things based on user selection.
fn main() {
    let mut user_input = String::new(); // Initialize variable to store user input
    println!("Select an option:\r\n[1] Get sysinfo\r\n[2] Read/Write File\r\n[3] Download file\r\n[4] Exit"); // Print options
    io::stdin().read_line(&mut user_input).expect("You entered something weird you donkey!"); // Get user input and store in variable
    let int_input = user_input.trim().parse::<i32>().unwrap(); // Convert user input to int (i32 means signed integer 32 bits)
    
    match int_input { // If Else statement
        1 => getsysinfo(), // If int_input == 1, call getsysinfo()
        2 => readwritefile(),
        3 => downloadfile(),
        4 => process::exit(1), // end program
        _ => println!("You didn't choose one of the given options, you donkey!") // input validation
    }
}
My function downloadfile() looks like this, referenced from the Rust cookbook on downloading files.
error_chain! {
    foreign_links {
        Io(std::io::Error);
        HttpRequest(reqwest::Error);
    }
}
async fn downloadfile() -> Result<()> {
    let tmp_dir = Builder::new().prefix("example").tempdir()?;
    let target = "localhost:8000/downloaded.txt";
    let response = reqwest::get(target).await?;
    let mut dest = {
        let fname = response
            .url()
            .path_segments()
            .and_then(|segments| segments.last())
            .and_then(|name| if name.is_empty() { None } else { Some(name) })
            .unwrap_or("tmp.bin");
        println!("File to download: {}", fname);
        let fname = tmp_dir.path().join(fname);
        println!("Will be located under: {:?}", fname);
        File::create(fname)?
    };
    let content = response.text().await?;
    copy(&mut content.as_bytes(), &mut dest)?;
    Ok(())
}
I get the following error:
`match` arms have incompatible types
expected unit type `()`
 found opaque type `impl Future<Output = std::result::Result<(), Error>>`
I presume its because the async function returns a Future type, so how can I make this code work?
 
    