/// Records a counter.
///
/// Functionally equivalent to calling [`Recorder::record_counter`].
///
/// ### Examples
///
/// ```rust
/// # #[macro_use]
/// # extern crate metrics;
/// fn do_thing() {
/// let count: u64 = 42;
/// counter!("do_thing", count);
/// }
/// # fn main() {}
/// ```
///
/// Labels can also be passed along:
///
/// ```rust
/// # #[macro_use]
/// # extern crate metrics;
/// fn do_thing() {
/// let count: u64 = 42;
/// let user: String = String::from("jane");
/// counter!("do_thing", count, "service" => "admin", "user" => user);
/// }
/// # fn main() {}
/// ```
/// Records a gauge.
///
/// Functionally equivalent to calling [`Recorder::record_gauge`].
///
/// ### Examples
///
/// ```rust
/// # #[macro_use]
/// # extern crate metrics;
/// fn update_current_value() {
/// let value: i64 = -131;
/// gauge!("current_value", value);
/// }
/// # fn main() {}
/// ```
///
/// Labels can also be passed along:
///
/// ```rust
/// # #[macro_use]
/// # extern crate metrics;
/// fn update_current_value() {
/// let value: i64 = -131;
/// let creator: String = String::from("jane");
/// gauge!("current_value", value, "creator" => creator);
/// }
/// # fn main() {}
/// ```
/// Records a timing.
///
/// Functionally equivalent to calling [`Recorder::record_histogram`].
///
/// ### Examples
///
/// ```rust
/// # #[macro_use]
/// # extern crate metrics;
/// # use std::time::Instant;
/// # fn process() {}
/// fn handle_request() {
/// let start = Instant::now();
/// process();
/// let end = Instant::now();
///
/// // We can pass instances of `Instant` directly:
/// timing!("perf.request_processed", start, end);
///
/// // Or we can pass just the delta:
/// let delta = end - start;
/// timing!("perf.request_processed", delta);
///
/// // And we can even pass unsigned values, both for the start/end notation:
/// let start: u64 = 100;
/// let end: u64 = 200;
/// timing!("perf.request_processed", start, end);
///
/// // And the delta notation:
/// let delta: u64 = end - start;
/// timing!("perf.request_processed", delta);
/// }
/// # fn main() {}
/// ```
///
/// Labels can also be passed along:
///
/// ```rust
/// # #[macro_use]
/// # extern crate metrics;
/// # use std::time::Instant;
/// # fn process() {}
/// fn handle_request() {
/// let start = Instant::now();
/// process();
/// let end = Instant::now();
///
/// // We can pass instances of `Instant` directly:
/// timing!("perf.request_processed", start, end, "service" => "http", "type" => "checkout");
///
/// // Or we can pass just the delta:
/// let delta = end - start;
/// timing!("perf.request_processed", delta, "service" => "http", "type" => "checkout");
///
/// // And we can even pass unsigned values, both for the start/end notation:
/// let start: u64 = 100;
/// let end: u64 = 200;
/// timing!("perf.request_processed", start, end, "service" => "http", "type" => "checkout");
///
/// // And the delta notation:
/// let delta: u64 = end - start;
/// timing!("perf.request_processed", delta, "service" => "http", "type" => "checkout");
/// }
/// # fn main() {}
/// ```
/// Records a value.
///
/// Functionally equivalent to calling [`Recorder::record_histogram`].
///
/// ### Examples
///
/// ```rust
/// # #[macro_use]
/// # extern crate metrics;
/// # use std::time::Instant;
/// # fn process() -> u64 { 42 }
/// fn handle_request() {
/// let rows_read = process();
/// value!("client.process_num_rows", rows_read);
/// }
/// # fn main() {}
/// ```
///
/// Labels can also be passed along:
///
/// ```rust
/// # #[macro_use]
/// # extern crate metrics;
/// # use std::time::Instant;
/// # fn process() -> u64 { 42 }
/// fn handle_request() {
/// let rows_read = process();
/// value!("client.process_num_rows", rows_read, "resource" => "shard1", "table" => "posts");
/// }
/// # fn main() {}
/// ```