// Copyright 2014-2017 The html5ever Project Developers. See the // COPYRIGHT file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. macro_rules! unwrap_or_else { ($opt:expr, $else_block:block) => { match $opt { None => $else_block, Some(x) => x, } }; } macro_rules! unwrap_or_return { ($opt:expr, $retval:expr) => { unwrap_or_else!($opt, { return $retval }) }; } macro_rules! time { ($e:expr) => {{ let now = ::std::time::Instant::now(); let result = $e; let d = now.elapsed(); let dt = d.as_secs() * 1_000_000_000 + u64::from(d.subsec_nanos()); (result, dt) }}; } /// Conditionally perform string formatting. /// /// If `$enabled` is true, then do the formatting and return a `Cow::Owned`. /// /// Otherwise, just return the borrowed (often `'static`) string /// `$borrowed`. /// /// When `$enabled` is false, this avoids the overhead of allocating /// and writing to a buffer, as well as any overhead or side effects /// of the format arguments. macro_rules! format_if { ($enabled:expr, $borrowed:expr, $fmt:expr, $($args:expr),*) => { if $enabled { ::std::borrow::Cow::Owned(format!($fmt, $($args),*)) as ::std::borrow::Cow } else { ::std::borrow::Cow::Borrowed($borrowed) } } }