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}