1 #![cfg_attr(rustfmt, rustfmt_skip)] // https://github.com/rust-lang-nursery/rustfmt/issues/2754
2 
3 // Vendored from the static-cond crate as macro re-exports are not available in stable Rust.
4 // https://github.com/durka/static-cond/blob/36aa2dd/src/lib.rs
5 //
6 // Code is dual licensed under MIT/Apache-2.0
7 // Copyright (c) 2016 Alex Burka
8 #[macro_export]
9 #[doc(hidden)]
10 macro_rules! static_cond {
11     // private rule to define and call the local macro
12     (@go $lhs:tt $rhs:tt $arm1:tt $arm2:tt) => {
13         // note that the inner macro has no captures (it can't, because there's no way to escape `$`)
14         macro_rules! __static_cond {
15             ($lhs $lhs) => $arm1;
16             ($lhs $rhs) => $arm2
17         }
18 
19         __static_cond!($lhs $rhs);
20     };
21 
22     // no else condition provided: fall through with empty else
23     (if $lhs:tt == $rhs:tt $then:tt) => {
24         static_cond!(if $lhs == $rhs $then else { });
25     };
26     (if $lhs:tt != $rhs:tt $then:tt) => {
27         static_cond!(if $lhs != $rhs $then else { });
28     };
29 
30     // we evaluate a conditional by generating a new macro (in an inner scope, so name shadowing is
31     // not a big concern) and calling it
32     (if $lhs:tt == $rhs:tt $then:tt else $els:tt) => {
33         static_cond!(@go $lhs $rhs $then $els);
34     };
35     (if $lhs:tt != $rhs:tt $then:tt else $els:tt) => {
36         static_cond!(@go $lhs $rhs $els $then);
37     };
38 }
39