1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use std::sync::Arc;

use metriki_core::MetricsRegistry;
use warp::{self, Filter};

/// Inject metriki `MetricRegistry` into your warp handler
///
/// ```no_run
/// use std::sync::Arc;
///
/// use metriki_core::MetricsRegistry;
/// use metriki_warp::with_metrics;
/// use warp::{self, Filter};
///
/// let metrics = MetricsRegistry::arc();
/// let router = warp::get()
///   .and(with_metrics(metrics))
///   .map(|mtk: Arc<MetricsRegistry>| {
///      mtk.meter("hit").mark();
///      "yes"
///   });
/// ```
///
pub fn with_metrics(
    m: Arc<MetricsRegistry>,
) -> impl Filter<Extract = (Arc<MetricsRegistry>,), Error = std::convert::Infallible> + Clone {
    warp::any().map(move || m.clone())
}