clap/args/
macros.rs

1#[cfg(feature = "yaml")]
2macro_rules! yaml_tuple2 {
3    ($a:ident, $v:ident, $c:ident) => {{
4            if let Some(vec) = $v.as_vec() {
5                for ys in vec {
6                    if let Some(tup) = ys.as_vec() {
7                        debug_assert_eq!(2, tup.len());
8                        $a = $a.$c(yaml_str!(tup[0]), yaml_str!(tup[1]));
9                    } else {
10                        panic!("Failed to convert YAML value to vec");
11                    }
12                }
13            } else {
14                panic!("Failed to convert YAML value to vec");
15            }
16            $a
17        }
18    };
19}
20
21#[cfg(feature = "yaml")]
22macro_rules! yaml_tuple3 {
23    ($a:ident, $v:ident, $c:ident) => {{
24            if let Some(vec) = $v.as_vec() {
25                for ys in vec {
26                    if let Some(tup) = ys.as_vec() {
27                        debug_assert_eq!(3, tup.len());
28                        $a = $a.$c(yaml_str!(tup[0]), yaml_opt_str!(tup[1]), yaml_str!(tup[2]));
29                    } else {
30                        panic!("Failed to convert YAML value to vec");
31                    }
32                }
33            } else {
34                panic!("Failed to convert YAML value to vec");
35            }
36            $a
37        }
38    };
39}
40
41#[cfg(feature = "yaml")]
42macro_rules! yaml_vec_or_str {
43    ($v:ident, $a:ident, $c:ident) => {{
44            let maybe_vec = $v.as_vec();
45            if let Some(vec) = maybe_vec {
46                for ys in vec {
47                    if let Some(s) = ys.as_str() {
48                        $a = $a.$c(s);
49                    } else {
50                        panic!("Failed to convert YAML value {:?} to a string", ys);
51                    }
52                }
53            } else {
54                if let Some(s) = $v.as_str() {
55                    $a = $a.$c(s);
56                } else {
57                    panic!("Failed to convert YAML value {:?} to either a vec or string", $v);
58                }
59            }
60            $a
61        }
62    };
63}
64
65#[cfg(feature = "yaml")]
66macro_rules! yaml_opt_str {
67    ($v:expr) => {{
68        if $v.is_null() {
69            Some($v.as_str().unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)))
70        } else {
71            None
72        }
73    }};
74}
75
76#[cfg(feature = "yaml")]
77macro_rules! yaml_str {
78    ($v:expr) => {{
79        $v.as_str().unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v))
80    }};
81}
82
83#[cfg(feature = "yaml")]
84macro_rules! yaml_to_str {
85    ($a:ident, $v:ident, $c:ident) => {{
86        $a.$c(yaml_str!($v))
87    }};
88}
89
90#[cfg(feature = "yaml")]
91macro_rules! yaml_to_bool {
92    ($a:ident, $v:ident, $c:ident) => {{
93        $a.$c($v.as_bool().unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)))
94    }};
95}
96
97#[cfg(feature = "yaml")]
98macro_rules! yaml_to_u64 {
99    ($a:ident, $v:ident, $c:ident) => {{
100        $a.$c($v.as_i64().unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)) as u64)
101    }};
102}
103
104#[cfg(feature = "yaml")]
105macro_rules! yaml_to_usize {
106    ($a:ident, $v:ident, $c:ident) => {{
107        $a.$c($v.as_i64().unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)) as usize)
108    }};
109}