From 1e216f13133addbf4326d06c037ee156066f96f6 Mon Sep 17 00:00:00 2001 From: katelyn martin Date: Wed, 1 Jan 2025 00:00:00 +0000 Subject: [PATCH] refactor(metrics/histogram): constructor accepts `IntoIterator` this is a very small, **non-breaking**, alteration to the signature of `Histogram`'s constructor. rather than accepting an `impl Iterator`, this commit changes the parameter of `Histogram::new()` to be an `impl IntoIterator` instead. this does not affect the existing contract because of the blanket `impl IntoIterator for I` implementation provided by the standard library. by accepting `IntoIterator` however, callers providing a collection such as a `[f64; 5]` array or a `Vec` vector do not need to invoke `into_iter()` themselves at the call-site. ```rust // now, constructing a histogram needn't involve `into_iter()`... use prometheus_client::metrics::histogram::Histogram; let histogram = Histogram::new([10.0, 100.0, 1_000.0]); ``` this leans on the same sugar used by `for {}` loops, see the relevant section of the `std::iter` documentation here: no changes are needed within `Histogram::new()` because we already call `into_iter()` on the provider iterator when appending `f64::MAX` and collecting the buckets into a `Vec<_>`. Signed-off-by: katelyn martin --- CHANGELOG.md | 7 +++++++ src/metrics/histogram.rs | 9 +++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db4f606..0ef2847 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.24.0] - unreleased + +- `Histogram::new` now accepts an `IntoIterator` argument, rather than an `Iterator`. + See [PR 243]. + +[PR 243]: https://github.com/prometheus/client_rust/pull/243 + ## [0.23.0] ### Changed diff --git a/src/metrics/histogram.rs b/src/metrics/histogram.rs index f95ca8d..5a50278 100644 --- a/src/metrics/histogram.rs +++ b/src/metrics/histogram.rs @@ -28,7 +28,7 @@ use std::sync::Arc; /// let custom_buckets = [ /// 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0, /// ]; -/// let histogram = Histogram::new(custom_buckets.into_iter()); +/// let histogram = Histogram::new(custom_buckets); /// histogram.observe(4.2); /// ``` // TODO: Consider using atomics. See @@ -57,7 +57,12 @@ pub(crate) struct Inner { impl Histogram { /// Create a new [`Histogram`]. - pub fn new(buckets: impl Iterator) -> Self { + /// + /// ```rust + /// # use prometheus_client::metrics::histogram::Histogram; + /// let histogram = Histogram::new([10.0, 100.0, 1_000.0]); + /// ``` + pub fn new(buckets: impl IntoIterator) -> Self { Self { inner: Arc::new(RwLock::new(Inner { sum: Default::default(),