util_rs/input/
ux.rs

1use std::str::FromStr;
2
3use crate::Prompt;
4
5pub fn prompt(msg: &str) -> Prompt {
6    Prompt::new().msg(msg)
7}
8
9pub fn input<T: FromStr>(msg: &str) -> Result<T, T::Err> {
10    Prompt::new().msg(msg).get()
11}
12
13pub fn input_string(msg: &str) -> String {
14    Prompt::new().msg(msg).get_string()
15}
16
17impl Prompt<'_> {
18    pub fn read<T: FromStr>(&mut self) -> Result<T, T::Err> {
19        self.get()
20    }
21
22    pub fn read_str(&mut self) -> &str {
23        self.get_str()
24    }
25
26    pub fn read_string(self) -> String {
27        self.get_string()
28    }
29
30    pub fn read_until_ok<A, Ef>(&mut self, handle_error: Ef) -> A
31    where
32        A: FromStr,
33        Ef: FnMut(A::Err),
34    {
35        self.get_until_ok(handle_error)
36    }
37
38    pub fn read_until_ok_with<T, E, F, Ef>(&mut self, action: F, handle_error: Ef) -> T
39    where
40        F: FnMut(&str) -> Result<T, E>,
41        Ef: FnMut(E),
42    {
43        self.get_until_ok_with(action, handle_error)
44    }
45
46    pub fn read_line<T: FromStr>(&mut self) -> Result<T, T::Err> {
47        self.get()
48    }
49}