//! Helpers for observing duration on `HistogramVec` / `CounterVec` / `GaugeVec` / `MetricVec`. use std::{future::Future, time::Instant}; pub trait DurationResultObserver { fn observe_result(&self, res: &Result, duration: std::time::Duration); } pub async fn observe_async_block_duration_by_result< T, E, F: Future>, O: DurationResultObserver, >( observer: &O, block: F, ) -> Result { let start = Instant::now(); let result = block.await; let duration = start.elapsed(); observer.observe_result(&result, duration); result }