#[macro_export]
macro_rules! labels {
() => {
{
use std::collections::HashMap;
HashMap::new()
}
};
( $ ( $ KEY : expr => $ VALUE : expr , ) + ) => {
{
use std::collections::HashMap;
let mut lbs = HashMap::new();
$(
lbs.insert($KEY, $VALUE);
)+
lbs
}
}
}
#[macro_export]
macro_rules! opts {
( $ NAME : expr , $ HELP : expr $ ( , $ CONST_LABELS : expr ) * ) => {
{
use std::collections::HashMap;
let opts = $crate::Opts::new($NAME, $HELP);
let lbs = HashMap::<String, String>::new();
$(
let mut lbs = lbs;
lbs.extend($CONST_LABELS.iter().map(|(k, v)| ((*k).into(), (*v).into())));
)*
opts.const_labels(lbs)
}
}
}
#[macro_export]
macro_rules! histogram_opts {
($NAME:expr, $HELP:expr) => {{
$crate::HistogramOpts::new($NAME, $HELP)
}};
($NAME:expr, $HELP:expr, $BUCKETS:expr) => {{
let hopts = histogram_opts!($NAME, $HELP);
hopts.buckets($BUCKETS)
}};
($NAME:expr, $HELP:expr, $BUCKETS:expr, $CONST_LABELS:expr) => {{
let hopts = histogram_opts!($NAME, $HELP, $BUCKETS);
hopts.const_labels($CONST_LABELS)
}};
}
#[macro_export]
macro_rules! register_counter {
(@of_type $TYPE:ident, $OPTS:expr) => {{
let counter = $crate::$TYPE::with_opts($OPTS).unwrap();
$crate::register(Box::new(counter.clone())).map(|_| counter)
}};
($OPTS:expr) => {{
register_counter!(@of_type Counter, $OPTS)
}};
($NAME:expr, $HELP:expr) => {{
register_counter!(opts!($NAME, $HELP))
}};
}
#[macro_export]
macro_rules! register_int_counter {
($OPTS:expr) => {{
register_counter!(@of_type IntCounter, $OPTS)
}};
($NAME:expr, $HELP:expr) => {{
register_int_counter!(opts!($NAME, $HELP))
}};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __register_counter_vec {
($TYPE:ident, $OPTS:expr, $LABELS_NAMES:expr) => {{
let counter_vec = $crate::$TYPE::new($OPTS, $LABELS_NAMES).unwrap();
$crate::register(Box::new(counter_vec.clone())).map(|_| counter_vec)
}};
}
#[macro_export]
macro_rules! register_counter_vec {
($OPTS:expr, $LABELS_NAMES:expr) => {{
__register_counter_vec!(CounterVec, $OPTS, $LABELS_NAMES)
}};
($NAME:expr, $HELP:expr, $LABELS_NAMES:expr) => {{
register_counter_vec!(opts!($NAME, $HELP), $LABELS_NAMES)
}};
}
#[macro_export]
macro_rules! register_int_counter_vec {
($OPTS:expr, $LABELS_NAMES:expr) => {{
__register_counter_vec!(IntCounterVec, $OPTS, $LABELS_NAMES)
}};
($NAME:expr, $HELP:expr, $LABELS_NAMES:expr) => {{
register_int_counter_vec!(opts!($NAME, $HELP), $LABELS_NAMES)
}};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __register_gauge {
($TYPE:ident, $OPTS:expr) => {{
let gauge = $crate::$TYPE::with_opts($OPTS).unwrap();
$crate::register(Box::new(gauge.clone())).map(|_| gauge)
}};
}
#[macro_export]
macro_rules! register_gauge {
($OPTS:expr) => {{
__register_gauge!(Gauge, $OPTS)
}};
($NAME:expr, $HELP:expr) => {{
register_gauge!(opts!($NAME, $HELP))
}};
}
#[macro_export]
macro_rules! register_int_gauge {
($OPTS:expr) => {{
__register_gauge!(IntGauge, $OPTS)
}};
($NAME:expr, $HELP:expr) => {{
register_int_gauge!(opts!($NAME, $HELP))
}};
}
#[macro_export]
#[doc(hidden)]
macro_rules! __register_gauge_vec {
($TYPE:ident, $OPTS:expr, $LABELS_NAMES:expr) => {{
let gauge_vec = $crate::$TYPE::new($OPTS, $LABELS_NAMES).unwrap();
$crate::register(Box::new(gauge_vec.clone())).map(|_| gauge_vec)
}};
}
#[macro_export]
macro_rules! register_gauge_vec {
($OPTS:expr, $LABELS_NAMES:expr) => {{
__register_gauge_vec!(GaugeVec, $OPTS, $LABELS_NAMES)
}};
($NAME:expr, $HELP:expr, $LABELS_NAMES:expr) => {{
register_gauge_vec!(opts!($NAME, $HELP), $LABELS_NAMES)
}};
}
#[macro_export]
macro_rules! register_int_gauge_vec {
($OPTS:expr, $LABELS_NAMES:expr) => {{
__register_gauge_vec!(IntGaugeVec, $OPTS, $LABELS_NAMES)
}};
($NAME:expr, $HELP:expr, $LABELS_NAMES:expr) => {{
register_int_gauge_vec!(opts!($NAME, $HELP), $LABELS_NAMES)
}};
}
#[macro_export]
macro_rules! register_histogram {
($NAME:expr, $HELP:expr) => {
register_histogram!(histogram_opts!($NAME, $HELP))
};
($NAME:expr, $HELP:expr, $BUCKETS:expr) => {
register_histogram!(histogram_opts!($NAME, $HELP, $BUCKETS))
};
($HOPTS:expr) => {{
let histogram = $crate::Histogram::with_opts($HOPTS).unwrap();
$crate::register(Box::new(histogram.clone())).map(|_| histogram)
}};
}
#[macro_export]
macro_rules! register_histogram_vec {
($HOPTS:expr, $LABELS_NAMES:expr) => {{
let histogram_vec = $crate::HistogramVec::new($HOPTS, $LABELS_NAMES).unwrap();
$crate::register(Box::new(histogram_vec.clone())).map(|_| histogram_vec)
}};
($NAME:expr, $HELP:expr, $LABELS_NAMES:expr) => {{
register_histogram_vec!(histogram_opts!($NAME, $HELP), $LABELS_NAMES)
}};
($NAME:expr, $HELP:expr, $LABELS_NAMES:expr, $BUCKETS:expr) => {{
register_histogram_vec!(histogram_opts!($NAME, $HELP, $BUCKETS), $LABELS_NAMES)
}};
}