]> git.proxmox.com Git - rustc.git/blob - vendor/macro-utils/src/tern_python.rs
New upstream version 1.62.1+dfsg1
[rustc.git] / vendor / macro-utils / src / tern_python.rs
1 // MIT License
2 //
3 // Copyright (c) 2018 Guillaume Gomez
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to deal
7 // in the Software without restriction, including without limitation the rights
8 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 // copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // The above copyright notice and this permission notice shall be included in all
13 // copies or substantial portions of the Software.
14 //
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 // SOFTWARE.
22
23 /// You miss Python-like ternary conditions? Why not having them in Rust then?
24 ///
25 /// ```
26 /// # #[macro_use] extern crate macro_utils;
27 /// let y = 4;
28 /// let x = tern_python! { { "it's even" } if (y & 1 == 0) else { "it's odd" } };
29 ///
30 /// println!("{} is {}", y, x);
31 /// ```
32 #[macro_export]
33 macro_rules! tern_python {
34 ({ $if_expr:expr } if ($cond:expr) else { $else_expr:expr }) => {
35 if $cond {
36 $if_expr
37 } else {
38 $else_expr
39 }
40 };
41 }
42
43 /// The same as [`tern_python`] macro but shorter:
44 ///
45 /// ```
46 /// # #[macro_use] extern crate macro_utils;
47 /// let y = 4;
48 /// let x = tern_py! { { "it's even" } if (y & 1 == 0) else { "it's odd" } };
49 ///
50 /// println!("{} is {}", y, x);
51 /// ```
52 ///
53 /// [`tern_python`]: macro.tern_python.html
54 #[macro_export]
55 macro_rules! tern_py {
56 ({ $if_expr:expr } if ($cond:expr) else { $else_expr:expr }) => {
57 if $cond {
58 $if_expr
59 } else {
60 $else_expr
61 }
62 };
63 }
64
65 #[test]
66 fn tern_python() {
67 let y = 4;
68 let x = tern_python! { { "it's even" } if (y & 1 == 0) else { "it's odd" } };
69
70 assert_eq!(x, "it's even");
71
72 let x = tern_py! { { "it's even" } if (y & 1 == 0) else { "it's odd" } };
73
74 assert_eq!(x, "it's even");
75 }