@@ -9,8 +9,11 @@ use std::borrow::Cow;
99use std:: collections:: HashMap ;
1010use std:: fmt:: Write ;
1111use std:: ops:: Deref ;
12+ use std:: rc:: Rc ;
13+ use std:: sync:: Arc ;
1214
1315#[ cfg( feature = "protobuf" ) ]
16+ #[ cfg_attr( docsrs, doc( cfg( feature = "protobuf" ) ) ) ]
1417pub mod protobuf;
1518pub mod text;
1619
@@ -389,6 +392,33 @@ impl<'a> EncodeLabelKey for Cow<'a, str> {
389392 }
390393}
391394
395+ impl < T > EncodeLabelKey for Box < T >
396+ where
397+ for < ' a > & ' a T : EncodeLabelKey ,
398+ {
399+ fn encode ( & self , encoder : & mut LabelKeyEncoder ) -> Result < ( ) , std:: fmt:: Error > {
400+ EncodeLabelKey :: encode ( & self . as_ref ( ) , encoder)
401+ }
402+ }
403+
404+ impl < T > EncodeLabelKey for Arc < T >
405+ where
406+ for < ' a > & ' a T : EncodeLabelKey ,
407+ {
408+ fn encode ( & self , encoder : & mut LabelKeyEncoder ) -> Result < ( ) , std:: fmt:: Error > {
409+ EncodeLabelKey :: encode ( & self . as_ref ( ) , encoder)
410+ }
411+ }
412+
413+ impl < T > EncodeLabelKey for Rc < T >
414+ where
415+ for < ' a > & ' a T : EncodeLabelKey ,
416+ {
417+ fn encode ( & self , encoder : & mut LabelKeyEncoder ) -> Result < ( ) , std:: fmt:: Error > {
418+ EncodeLabelKey :: encode ( & self . as_ref ( ) , encoder)
419+ }
420+ }
421+
392422/// An encodable label value.
393423pub trait EncodeLabelValue {
394424 /// Encode oneself into the given encoder.
@@ -450,6 +480,33 @@ impl<'a> EncodeLabelValue for Cow<'a, str> {
450480 }
451481}
452482
483+ impl < T > EncodeLabelValue for Box < T >
484+ where
485+ for < ' a > & ' a T : EncodeLabelValue ,
486+ {
487+ fn encode ( & self , encoder : & mut LabelValueEncoder ) -> Result < ( ) , std:: fmt:: Error > {
488+ EncodeLabelValue :: encode ( & self . as_ref ( ) , encoder)
489+ }
490+ }
491+
492+ impl < T > EncodeLabelValue for Arc < T >
493+ where
494+ for < ' a > & ' a T : EncodeLabelValue ,
495+ {
496+ fn encode ( & self , encoder : & mut LabelValueEncoder ) -> Result < ( ) , std:: fmt:: Error > {
497+ EncodeLabelValue :: encode ( & self . as_ref ( ) , encoder)
498+ }
499+ }
500+
501+ impl < T > EncodeLabelValue for Rc < T >
502+ where
503+ for < ' a > & ' a T : EncodeLabelValue ,
504+ {
505+ fn encode ( & self , encoder : & mut LabelValueEncoder ) -> Result < ( ) , std:: fmt:: Error > {
506+ EncodeLabelValue :: encode ( & self . as_ref ( ) , encoder)
507+ }
508+ }
509+
453510impl EncodeLabelValue for f64 {
454511 fn encode ( & self , encoder : & mut LabelValueEncoder ) -> Result < ( ) , std:: fmt:: Error > {
455512 encoder. write_str ( dtoa:: Buffer :: new ( ) . format ( * self ) )
@@ -488,6 +545,12 @@ pub trait EncodeGaugeValue {
488545 fn encode ( & self , encoder : & mut GaugeValueEncoder ) -> Result < ( ) , std:: fmt:: Error > ;
489546}
490547
548+ impl EncodeGaugeValue for u32 {
549+ fn encode ( & self , encoder : & mut GaugeValueEncoder ) -> Result < ( ) , std:: fmt:: Error > {
550+ encoder. encode_u32 ( * self )
551+ }
552+ }
553+
491554impl EncodeGaugeValue for i64 {
492555 fn encode ( & self , encoder : & mut GaugeValueEncoder ) -> Result < ( ) , std:: fmt:: Error > {
493556 encoder. encode_i64 ( * self )
@@ -524,13 +587,17 @@ enum GaugeValueEncoderInner<'a> {
524587}
525588
526589impl < ' a > GaugeValueEncoder < ' a > {
527- fn encode_f64 ( & mut self , v : f64 ) -> Result < ( ) , std:: fmt:: Error > {
528- for_both_mut ! ( self , GaugeValueEncoderInner , e, e. encode_f64 ( v) )
590+ fn encode_u32 ( & mut self , v : u32 ) -> Result < ( ) , std:: fmt:: Error > {
591+ for_both_mut ! ( self , GaugeValueEncoderInner , e, e. encode_u32 ( v) )
529592 }
530593
531594 fn encode_i64 ( & mut self , v : i64 ) -> Result < ( ) , std:: fmt:: Error > {
532595 for_both_mut ! ( self , GaugeValueEncoderInner , e, e. encode_i64( v) )
533596 }
597+
598+ fn encode_f64 ( & mut self , v : f64 ) -> Result < ( ) , std:: fmt:: Error > {
599+ for_both_mut ! ( self , GaugeValueEncoderInner , e, e. encode_f64( v) )
600+ }
534601}
535602
536603impl < ' a > From < text:: GaugeValueEncoder < ' a > > for GaugeValueEncoder < ' a > {
0 commit comments