1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
//! Input/output utilities with proper `Result`-based error handling.
//! Functions propagate the errors from Rust standard library.

use std::error::Error;
use std::io;
use std::io::stdin;

pub fn read_line() -> Result<String, io::Error> {
    let terminal = stdin();
    let mut output = String::new();
    terminal.read_line(&mut output)?;
    Ok(output)
}

pub fn read_i64() -> Result<i64, Box<dyn Error>> {
    let line = read_line()?;
    let number: i64 = line.trim().parse()?;
    Ok(number)
}