diff --git a/CHANGELOG.md b/CHANGELOG.md index 72dab1f..4c83e85 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,16 @@ 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.22.1] + +### Added + +- Added `EncodeLabelValue` and `EncodeLabelKey` implementations for `Arc`, + `Rc`, and `Box`. + See [PR 188]. + +[PR 188]: https://github.com/prometheus/client_rust/pull/188 + ## [0.22.0] ### Changed diff --git a/Cargo.toml b/Cargo.toml index f4b1259..ce4d0ce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "prometheus-client" -version = "0.22.0" +version = "0.22.1" authors = ["Max Inden "] edition = "2021" description = "Open Metrics client library allowing users to natively instrument applications." diff --git a/src/encoding.rs b/src/encoding.rs index a8ad861..24d0d72 100644 --- a/src/encoding.rs +++ b/src/encoding.rs @@ -9,6 +9,8 @@ use std::borrow::Cow; use std::collections::HashMap; use std::fmt::Write; use std::ops::Deref; +use std::rc::Rc; +use std::sync::Arc; #[cfg(feature = "protobuf")] pub mod protobuf; @@ -389,6 +391,33 @@ impl<'a> EncodeLabelKey for Cow<'a, str> { } } +impl EncodeLabelKey for Box +where + for<'a> &'a T: EncodeLabelKey, +{ + fn encode(&self, encoder: &mut LabelKeyEncoder) -> Result<(), std::fmt::Error> { + EncodeLabelKey::encode(&self.as_ref(), encoder) + } +} + +impl EncodeLabelKey for Arc +where + for<'a> &'a T: EncodeLabelKey, +{ + fn encode(&self, encoder: &mut LabelKeyEncoder) -> Result<(), std::fmt::Error> { + EncodeLabelKey::encode(&self.as_ref(), encoder) + } +} + +impl EncodeLabelKey for Rc +where + for<'a> &'a T: EncodeLabelKey, +{ + fn encode(&self, encoder: &mut LabelKeyEncoder) -> Result<(), std::fmt::Error> { + EncodeLabelKey::encode(&self.as_ref(), encoder) + } +} + /// An encodable label value. pub trait EncodeLabelValue { /// Encode oneself into the given encoder. @@ -450,6 +479,33 @@ impl<'a> EncodeLabelValue for Cow<'a, str> { } } +impl EncodeLabelValue for Box +where + for<'a> &'a T: EncodeLabelValue, +{ + fn encode(&self, encoder: &mut LabelValueEncoder) -> Result<(), std::fmt::Error> { + EncodeLabelValue::encode(&self.as_ref(), encoder) + } +} + +impl EncodeLabelValue for Arc +where + for<'a> &'a T: EncodeLabelValue, +{ + fn encode(&self, encoder: &mut LabelValueEncoder) -> Result<(), std::fmt::Error> { + EncodeLabelValue::encode(&self.as_ref(), encoder) + } +} + +impl EncodeLabelValue for Rc +where + for<'a> &'a T: EncodeLabelValue, +{ + fn encode(&self, encoder: &mut LabelValueEncoder) -> Result<(), std::fmt::Error> { + EncodeLabelValue::encode(&self.as_ref(), encoder) + } +} + impl EncodeLabelValue for f64 { fn encode(&self, encoder: &mut LabelValueEncoder) -> Result<(), std::fmt::Error> { encoder.write_str(dtoa::Buffer::new().format(*self))