   LL|       |//@ edition: 2018
   LL|       |
   LL|       |macro_rules! bail {
   LL|       |    ($msg:literal $(,)?) => {
   LL|       |        if $msg.len() > 0 {
   LL|       |            println!("no msg");
   LL|       |        } else {
   LL|       |            println!($msg);
   LL|       |        }
   LL|       |        return Err(String::from($msg));
   LL|       |    };
   LL|       |}
   LL|       |
   LL|       |macro_rules! on_error {
   LL|       |    ($value:expr, $error_message:expr) => {
   LL|      0|        $value.or_else(|e| {
   LL|      0|            // This closure, which is declared in a macro, should be instrumented.
   LL|      0|            let message = format!($error_message, e);
   LL|      0|            if message.len() > 0 {
   LL|      0|                println!("{}", message);
   LL|      0|                Ok(String::from("ok"))
   LL|       |            } else {
   LL|      0|                bail!("error");
   LL|       |            }
   LL|      0|        })
   LL|       |    };
   LL|       |}
   LL|       |
   LL|      1|fn load_configuration_files() -> Result<String, String> {
   LL|      1|    Ok(String::from("config"))
   LL|      1|}
   LL|       |
   LL|      1|pub fn main() -> Result<(), String> {
   LL|      1|    println!("Starting service");
   LL|      1|    let config = on_error!(load_configuration_files(), "Error loading configs: {}")?;
                                                                                                 ^0
   LL|       |
   LL|      1|    let startup_delay_duration = String::from("arg");
   LL|      1|    let _ = (config, startup_delay_duration);
   LL|      1|    Ok(())
   LL|      1|}

