@@ -9,6 +9,8 @@ use std::borrow::Cow;
9
9
use std:: collections:: HashMap ;
10
10
use std:: fmt:: Write ;
11
11
use std:: ops:: Deref ;
12
+ use std:: rc:: Rc ;
13
+ use std:: sync:: Arc ;
12
14
13
15
#[ cfg( feature = "protobuf" ) ]
14
16
pub mod protobuf;
@@ -389,6 +391,33 @@ impl<'a> EncodeLabelKey for Cow<'a, str> {
389
391
}
390
392
}
391
393
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
+
392
421
/// An encodable label value.
393
422
pub trait EncodeLabelValue {
394
423
/// Encode oneself into the given encoder.
@@ -450,6 +479,33 @@ impl<'a> EncodeLabelValue for Cow<'a, str> {
450
479
}
451
480
}
452
481
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
+
453
509
impl EncodeLabelValue for f64 {
454
510
fn encode ( & self , encoder : & mut LabelValueEncoder ) -> Result < ( ) , std:: fmt:: Error > {
455
511
encoder. write_str ( dtoa:: Buffer :: new ( ) . format ( * self ) )
0 commit comments