@@ -12,21 +12,18 @@ pub struct LabelSet {
1212}
1313
1414impl LabelSet {
15+ /// Insert a new label pair or update the value of an existing label.
1516 pub fn upsert ( & mut self , key : LabelName , value : LabelValue ) {
1617 self . items . insert ( key, value) ;
1718 }
18-
19- pub fn iter ( & self ) -> impl Iterator < Item = ( & LabelName , & LabelValue ) > {
20- self . items . iter ( )
21- }
2219}
2320
2421impl Display for LabelSet {
2522 fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
2623 let items = self
2724 . items
2825 . iter ( )
29- . map ( |( key, value) | format ! ( "{key}={value}" ) )
26+ . map ( |( key, value) | format ! ( "{key}=\" {value}\" " ) )
3027 . collect :: < Vec < _ > > ( )
3128 . join ( "," ) ;
3229
@@ -40,6 +37,30 @@ impl From<BTreeMap<LabelName, LabelValue>> for LabelSet {
4037 }
4138}
4239
40+ impl From < Vec < ( & str , & str ) > > for LabelSet {
41+ fn from ( vec : Vec < ( & str , & str ) > ) -> Self {
42+ let mut items = BTreeMap :: new ( ) ;
43+
44+ for ( name, value) in vec {
45+ items. insert ( LabelName :: new ( name) , LabelValue :: new ( value) ) ;
46+ }
47+
48+ Self { items }
49+ }
50+ }
51+
52+ impl From < Vec < ( String , String ) > > for LabelSet {
53+ fn from ( vec : Vec < ( String , String ) > ) -> Self {
54+ let mut items = BTreeMap :: new ( ) ;
55+
56+ for ( name, value) in vec {
57+ items. insert ( LabelName :: new ( & name) , LabelValue :: new ( & value) ) ;
58+ }
59+
60+ Self { items }
61+ }
62+ }
63+
4364impl From < Vec < LabelPair > > for LabelSet {
4465 fn from ( vec : Vec < LabelPair > ) -> Self {
4566 let mut items = BTreeMap :: new ( ) ;
@@ -71,6 +92,26 @@ impl<const N: usize> From<[LabelPair; N]> for LabelSet {
7192 }
7293}
7394
95+ impl < const N : usize > From < [ ( String , String ) ; N ] > for LabelSet {
96+ fn from ( arr : [ ( String , String ) ; N ] ) -> Self {
97+ let values = arr
98+ . iter ( )
99+ . map ( |( name, value) | ( LabelName :: new ( name) , LabelValue :: new ( value) ) )
100+ . collect :: < BTreeMap < _ , _ > > ( ) ;
101+ Self { items : values }
102+ }
103+ }
104+
105+ impl < const N : usize > From < [ ( & str , & str ) ; N ] > for LabelSet {
106+ fn from ( arr : [ ( & str , & str ) ; N ] ) -> Self {
107+ let values = arr
108+ . iter ( )
109+ . map ( |( name, value) | ( LabelName :: new ( name) , LabelValue :: new ( value) ) )
110+ . collect :: < BTreeMap < _ , _ > > ( ) ;
111+ Self { items : values }
112+ }
113+ }
114+
74115impl From < LabelPair > for LabelSet {
75116 fn from ( label_pair : LabelPair ) -> Self {
76117 let mut set = BTreeMap :: new ( ) ;
@@ -280,13 +321,20 @@ mod tests {
280321 #[ test]
281322 fn it_should_alphabetically_order_labels_in_prometheus_format ( ) {
282323 let label_set = LabelSet :: from ( [
283- ( LabelName :: new ( "label_name_b " ) , LabelValue :: new ( "label value b " ) ) ,
284- ( LabelName :: new ( "label_name_a " ) , LabelValue :: new ( "label value a " ) ) ,
324+ ( LabelName :: new ( "b_label_name " ) , LabelValue :: new ( "b label value" ) ) ,
325+ ( LabelName :: new ( "a_label_name " ) , LabelValue :: new ( "a label value" ) ) ,
285326 ] ) ;
286327
287328 assert_eq ! (
288329 label_set. to_prometheus( ) ,
289- r#"{label_name_a=" label value a",label_name_b=" label value b "}"#
330+ r#"{a_label_name="a label value",b_label_name="b label value"}"#
290331 ) ;
291332 }
333+
334+ #[ test]
335+ fn it_should_allow_displaying ( ) {
336+ let label_set = LabelSet :: from ( ( LabelName :: new ( "label_name" ) , LabelValue :: new ( "label value" ) ) ) ;
337+
338+ assert_eq ! ( label_set. to_string( ) , r#"{label_name="label value"}"# ) ;
339+ }
292340}
0 commit comments