1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
/// The `eval!` macro provides conditional code evaluation according to [`Verbosity`] level. /// /// # Features /// /// * you can evaluate code according to level of verbosity, /// _i.e._ `Quite`, `Terse` _or_ `Verbose` /// /// * all `Terse` evaluations will also evaluate if the level is set to `Verbose` /// /// * you can choose unique code evaluations for `Terse` or `Verbose` individually /// /// # Basic Examples /// /// * _evaluates if [`Verbosity`] is_ `Quite` /// /// ```rust /// # use cli_toolbox::eval; /// eval! { QUITE foo() } /// # fn foo() { /* ... */ } /// ``` /// /// * _evaluates if [`Verbosity`] is_ `Terse` or `Verbose` /// /// ```rust /// # use cli_toolbox::eval; /// eval! { TERSE foo() } /// # fn foo() { /* ... */ } /// ``` /// /// * _evaluates if [`Verbosity`] is_ `Verbose` /// /// ```rust /// # use cli_toolbox::eval; /// eval! { VERBOSE foo() } /// # fn foo() { /* ... */ } /// ``` /// /// # Terse or Verbose Examples /// /// These examples evaluate conditionally based on [`Verbosity`] level. /// /// * _terse or verbose code blocks_ /// /// ```rust /// # use cli_toolbox::eval; /// eval! { /// TERSE { foo(); } /// VERBOSE { junk(); } /// } /// # fn foo() { /* ... */ } /// # fn junk() { /* ... */ } /// ``` /// /// * _terse or verbose expressions_ /// /// ```rust /// # use cli_toolbox::eval; /// eval! { /// TERSE foo(), /// VERBOSE junk() /// } /// # fn foo() { /* ... */ } /// # fn junk() { /* ... */ } /// ``` /// /// * _terse expression or verbose block_ /// /// ```rust /// # use cli_toolbox::eval; /// eval! { /// TERSE foo(), /// VERBOSE { junk(); } /// } /// # fn foo() { /* ... */ } /// # fn junk() { /* ... */ } /// ``` /// /// * _terse block or verbose expression_ /// /// ```rust /// # use cli_toolbox::eval; /// eval! { /// TERSE { foo(); } /// VERBOSE junk() /// } /// # fn foo() { /* ... */ } /// # fn junk() { /* ... */ } /// ``` /// /// [`Verbosity`]: crate::verbosity::Verbosity #[macro_export] macro_rules! eval { // =============================================================================== // evaluate if quite (QUITE $expr:expr) => { if $crate::Verbosity::is_quite() { $expr } }; // =============================================================================== // evaluate if terse (TERSE $expr:expr) => { if $crate::Verbosity::is_terse() { $expr } }; // =============================================================================== // evaluate if verbose (VERBOSE $expr:expr) => { if $crate::Verbosity::is_verbose() { $expr } }; // =============================================================================== // evaluate terse or verbose blocks ( TERSE $terse_block:block VERBOSE $verbose_block:block ) => { match $crate::Verbosity::level() { $crate::Verbosity::Terse => $terse_block $crate::Verbosity::Verbose => $verbose_block _ => {} } }; // evaluate terse or verbose expressions ( TERSE $terse_expr:expr, VERBOSE $verbose_expr:expr ) => { match $crate::Verbosity::level() { $crate::Verbosity::Terse => $terse_expr, $crate::Verbosity::Verbose => $verbose_expr, _ => {} } }; // evaluate terse block or verbose expression ( TERSE $terse_block:block VERBOSE $verbose_expr:expr ) => { match $crate::Verbosity::level() { $crate::Verbosity::Terse => $terse_block $crate::Verbosity::Verbose => $verbose_expr, _ => {} } }; // evaluate terse expression or verbose block ( TERSE $terse_expr:expr, VERBOSE $verbose_block:block ) => { match $crate::Verbosity::level() { $crate::Verbosity::Terse => $terse_expr, $crate::Verbosity::Verbose => $verbose_block _ => {} } }; }