...

Source file src/github.com/chaos-mesh/chaos-mesh/pkg/label/label.go

Documentation: github.com/chaos-mesh/chaos-mesh/pkg/label

     1  // Copyright 2021 Chaos Mesh Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  // http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  //
    15  
    16  package label
    17  
    18  import (
    19  	"fmt"
    20  	"strings"
    21  
    22  	"github.com/pkg/errors"
    23  )
    24  
    25  // Label is the label field in metadata
    26  type Label map[string]string
    27  
    28  // String converts label to a string
    29  func (l Label) String() string {
    30  	var arr []string
    31  
    32  	for k, v := range l {
    33  		if len(k) == 0 {
    34  			continue
    35  		}
    36  
    37  		arr = append(arr, fmt.Sprintf("%s=%s", k, v))
    38  	}
    39  
    40  	return strings.Join(arr, ",")
    41  }
    42  
    43  func ParseLabel(data string) (Label, error) {
    44  	if len(data) == 0 {
    45  		return Label{}, nil
    46  	}
    47  
    48  	labels := make(map[string]string)
    49  	for _, tok := range strings.Split(data, ",") {
    50  		kv := strings.Split(tok, "=")
    51  		if len(kv) != 2 {
    52  			return nil, errors.Errorf("invalid labels: %s", data)
    53  		}
    54  		labels[kv[0]] = kv[1]
    55  	}
    56  	return labels, nil
    57  }
    58