evobench_tools/utillib/
ask.rs1use std::io::Write;
2use std::{
3 fs::OpenOptions,
4 io::{BufRead, BufReader},
5};
6
7use anyhow::{Result, bail};
8
9pub fn ask_yn(question: &str) -> Result<bool> {
10 let mut opts = OpenOptions::new();
11 opts.read(true).write(true).create(false);
12 let opn = || opts.open("/dev/tty");
13 let mut inp = BufReader::new(opn()?);
14 let mut outp = opn()?;
15 for n in (1..5).rev() {
16 write!(outp, "{} (y/n) ", question)?;
17 let mut ans = String::new();
18 inp.read_line(&mut ans)?;
19 if ans.len() > 1 && ans.starts_with("y") {
20 return Ok(true);
21 } else if ans.len() > 1 && ans.starts_with("n") {
22 return Ok(false);
23 }
24 writeln!(outp, "Please answer with y or n, {} tries left", n)?;
25 }
26 bail!("Could not get an answer to the question {:?}", question)
27}