askit/
macros.rs

1/// Sugar macro similar to Python's `input()`.
2///
3/// Usage:
4/// ```ignore
5/// let name: String = input!("Name: ");
6/// let tries: u8 = input!("Retries (default 3): ", default = 3);
7/// let port: u16 = input!("Port: ", retries = 2);
8/// let pct: f32 = input!("Percent [50.0]: ", default = 50.0, retries = 3);
9/// ```
10#[macro_export]
11macro_rules! input {
12    // msg only
13    ($msg:expr) => {{
14        $crate::prompt($msg).get()
15    }};
16
17    // msg, retries = N
18    ($msg:expr, retries = $r:expr) => {{
19        $crate::prompt($msg).retries($r).get()
20    }};
21
22    // msg, default = "str" | number (type with .to::<T>().default_val)
23    ($msg:expr, default = $d:expr) => {{
24        $crate::prompt($msg).to().default_val($d).get()
25    }};
26
27    // msg, default = X, retries = N (1)
28    ($msg:expr, default = $d:expr, retries = $r:expr) => {{
29        $crate::prompt($msg).to().default_val($d).retries($r).get()
30    }};
31
32    // msg, retries = N, default = X (2)
33    ($msg:expr, retries = $r:expr, default = $d:expr) => {{
34        $crate::prompt($msg).to().default_val($d).retries($r).get()
35    }};
36}