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}