Console Text Input

We're going to start by adding a helper function to our library that reads text input from the console.

Let's create a function that will read a line of text from the console.

#![allow(unused)]
fn main() {
pub fn read_line() -> String {
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    input
}
}

What's the expect? Accessing standard input might fail - so Rust is returning a Result type. We're going to look at those later. For now, we're just going to crash if it fails. You can also use unwrap, but expect lets you specify an error message.

Now let's test it:

fn main() {
    let input = login_lib::read_line();
    println!("You typed: [{input}]");
}

Notice how there's an extra carriage return. Reading input keeps the control characters. This is rarely what you want, so let's trim it:

#![allow(unused)]
fn main() {
pub fn read_line() -> String {
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    input.trim().to_string()
}
}

Now let's test it:

fn main() {
    let input = login_lib::read_line();
    println!("You typed: [{input}]");
}

Bingo - trimmed text input.