#[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 , [ $ ( $ BUCKETS : expr ) , * ] ) => {
{
let his_opts = $crate::HistogramOpts::new($NAME, $HELP);
let buckets = Vec::new();
$(
let mut buckets = buckets;
buckets.extend($BUCKETS);
)*;
his_opts.buckets(buckets)
}
};
( $ NAME : expr , $ HELP : expr , $ CONST_LABELS : expr , [ $ ( $ BUCKETS : expr ) , + ] ) => {
{
use std::collections::HashMap;
use std::iter::FromIterator;
let his_opts = histogram_opts!($NAME, $HELP, [ $( $BUCKETS ), + ]);
his_opts.const_labels(
HashMap::from_iter($CONST_LABELS.iter().map(|(k, v)| ((*k).into(), (*v).into()))))
}
};
( $ NAME : expr , $ HELP : expr $ ( , $ CONST_LABELS : expr ) * ) => {
{
let opts = opts!($NAME, $HELP $(, $CONST_LABELS ) *);
$crate::HistogramOpts::from(opts)
}
}
}
#[macro_export]
macro_rules! register_counter {
( $ NAME : expr , $ HELP : expr $ ( , $ CONST_LABELS : expr ) * ) => {
register_counter!(opts!($NAME, $HELP $(, $CONST_LABELS)*))
};
( $ OPTS : expr ) => {
{
let counter = $crate::Counter::with_opts($OPTS).unwrap();
$crate::register(Box::new(counter.clone())).map(|_| counter)
}
}
}
#[macro_export]
macro_rules! register_counter_vec {
( $ OPTS : expr , $ LABELS_NAMES : expr ) => {
{
let counter_vec = $crate::CounterVec::new($OPTS, $LABELS_NAMES).unwrap();
$crate::register(Box::new(counter_vec.clone())).map(|_| counter_vec)
}
};
( $ NAME : expr , $ HELP : expr , $ LABELS_NAMES : expr ) => {
{
register_counter_vec!(opts!($NAME, $HELP), $LABELS_NAMES)
}
};
( $ NAME : expr , $ HELP : expr , $ CONST_LABELS : expr , $ LABELS_NAMES : expr ) => {
{
register_counter_vec!(opts!($NAME, $HELP, $CONST_LABELS), $LABELS_NAMES)
}
};
}
#[macro_export]
macro_rules! register_gauge {
( $ NAME : expr , $ HELP : expr $ ( , $ CONST_LABELS : expr ) * ) => {
register_gauge!(opts!($NAME, $HELP $(, $CONST_LABELS)*))
};
( $ OPTS : expr ) => {
{
let gauge = $crate::Gauge::with_opts($OPTS).unwrap();
$crate::register(Box::new(gauge.clone())).map(|_| gauge)
}
}
}
#[macro_export]
macro_rules! register_gauge_vec {
( $ OPTS : expr , $ LABELS_NAMES : expr ) => {
{
let gauge_vec = $crate::GaugeVec::new($OPTS, $LABELS_NAMES).unwrap();
$crate::register(Box::new(gauge_vec.clone())).map(|_| gauge_vec)
}
};
( $ NAME : expr , $ HELP : expr , $ LABELS_NAMES : expr ) => {
{
register_gauge_vec!(opts!($NAME, $HELP), $LABELS_NAMES)
}
};
( $ NAME : expr , $ HELP : expr , $ CONST_LABELS : expr , $ LABELS_NAMES : expr ) => {
{
register_gauge_vec!(opts!($NAME, $HELP, $CONST_LABELS), $LABELS_NAMES)
}
};
}
#[macro_export]
macro_rules! register_untyped {
( $ NAME : expr , $ HELP : expr $ ( , $ CONST_LABELS : expr ) * ) => {
register_untyped!(opts!($NAME, $HELP $(, $CONST_LABELS)*))
};
( $ OPTS : expr ) => {
{
let untyped = $crate::Untyped::with_opts($OPTS).unwrap();
$crate::register(Box::new(untyped.clone())).map(|_| untyped)
}
}
}
#[macro_export]
macro_rules! register_untyped_vec {
( $ OPTS : expr , $ LABELS_NAMES : expr ) => {
{
let untyped_vec = $crate::UntypedVec::new($OPTS, $LABELS_NAMES).unwrap();
$crate::register(Box::new(untyped_vec.clone())).map(|_| untyped_vec)
}
};
( $ NAME : expr , $ HELP : expr , $ LABELS_NAMES : expr ) => {
{
register_untyped_vec!(opts!($NAME, $HELP), $LABELS_NAMES)
}
};
( $ NAME : expr , $ HELP : expr , $ CONST_LABELS : expr , $ LABELS_NAMES : expr ) => {
{
register_untyped_vec!(opts!($NAME, $HELP, $CONST_LABELS), $LABELS_NAMES)
}
};
}
#[macro_export]
macro_rules! register_histogram {
( $ NAME : expr , $ HELP : expr ) => {
register_histogram!(histogram_opts!($NAME, $HELP))
};
( $ NAME : expr , $ HELP : expr , $ CONST_LABELS : expr ) => {
register_histogram!(histogram_opts!($NAME, $HELP, $CONST_LABELS))
};
( $ NAME : expr , $ HELP : expr , $ CONST_LABELS : expr , [ $ ( $ BUCKETS : expr ) , + ] ) => {
register_histogram!(
histogram_opts!($NAME, $HELP, $CONST_LABELS, [ $($BUCKETS), + ]))
};
( $ OPTS : expr ) => {
{
let histogram = $crate::Histogram::with_opts($OPTS).unwrap();
$crate::register(Box::new(histogram.clone())).map(|_| histogram)
}
}
}
#[macro_export]
macro_rules! register_histogram_vec {
( $ OPTS : expr , $ LABELS_NAMES : expr ) => {
{
let histogram_vec = $crate::HistogramVec::new($OPTS, $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 , $ CONST_LABELS : expr , $ LABELS_NAMES : expr ) => {
{
register_histogram_vec!(histogram_opts!($NAME, $HELP, $CONST_LABELS), $LABELS_NAMES)
}
};
}