@@ -9,6 +9,8 @@ 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" ) ]
1416pub mod protobuf;
@@ -389,6 +391,33 @@ impl<'a> EncodeLabelKey for Cow<'a, str> {
389391 }
390392}
391393
394+ impl < T > EncodeLabelKey for Box < T >
395+ where
396+ for < ' a > & ' a T : EncodeLabelKey ,
397+ {
398+ fn encode ( & self , encoder : & mut LabelKeyEncoder ) -> Result < ( ) , std:: fmt:: Error > {
399+ EncodeLabelKey :: encode ( & self . as_ref ( ) , encoder)
400+ }
401+ }
402+
403+ impl < T > EncodeLabelKey for Arc < T >
404+ where
405+ for < ' a > & ' a T : EncodeLabelKey ,
406+ {
407+ fn encode ( & self , encoder : & mut LabelKeyEncoder ) -> Result < ( ) , std:: fmt:: Error > {
408+ EncodeLabelKey :: encode ( & self . as_ref ( ) , encoder)
409+ }
410+ }
411+
412+ impl < T > EncodeLabelKey for Rc < T >
413+ where
414+ for < ' a > & ' a T : EncodeLabelKey ,
415+ {
416+ fn encode ( & self , encoder : & mut LabelKeyEncoder ) -> Result < ( ) , std:: fmt:: Error > {
417+ EncodeLabelKey :: encode ( & self . as_ref ( ) , encoder)
418+ }
419+ }
420+
392421/// An encodable label value.
393422pub trait EncodeLabelValue {
394423 /// Encode oneself into the given encoder.
@@ -450,6 +479,33 @@ impl<'a> EncodeLabelValue for Cow<'a, str> {
450479 }
451480}
452481
482+ impl < T > EncodeLabelValue for Box < T >
483+ where
484+ for < ' a > & ' a T : EncodeLabelValue ,
485+ {
486+ fn encode ( & self , encoder : & mut LabelValueEncoder ) -> Result < ( ) , std:: fmt:: Error > {
487+ EncodeLabelValue :: encode ( & self . as_ref ( ) , encoder)
488+ }
489+ }
490+
491+ impl < T > EncodeLabelValue for Arc < T >
492+ where
493+ for < ' a > & ' a T : EncodeLabelValue ,
494+ {
495+ fn encode ( & self , encoder : & mut LabelValueEncoder ) -> Result < ( ) , std:: fmt:: Error > {
496+ EncodeLabelValue :: encode ( & self . as_ref ( ) , encoder)
497+ }
498+ }
499+
500+ impl < T > EncodeLabelValue for Rc < T >
501+ where
502+ for < ' a > & ' a T : EncodeLabelValue ,
503+ {
504+ fn encode ( & self , encoder : & mut LabelValueEncoder ) -> Result < ( ) , std:: fmt:: Error > {
505+ EncodeLabelValue :: encode ( & self . as_ref ( ) , encoder)
506+ }
507+ }
508+
453509impl EncodeLabelValue for f64 {
454510 fn encode ( & self , encoder : & mut LabelValueEncoder ) -> Result < ( ) , std:: fmt:: Error > {
455511 encoder. write_str ( dtoa:: Buffer :: new ( ) . format ( * self ) )
0 commit comments