github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/courier/metadata.go (about)

     1  package courier
     2  
     3  type IMeta interface {
     4  	Meta() Metadata
     5  }
     6  
     7  func MetadataMerge(metas ...Metadata) Metadata {
     8  	m := Metadata{}
     9  	for _, meta := range metas {
    10  		m.Merge(meta)
    11  	}
    12  	return m
    13  }
    14  
    15  type Metadata map[string][]string
    16  
    17  func (m Metadata) Merge(metadata Metadata) {
    18  	for key, values := range metadata {
    19  		m.Set(key, values...)
    20  	}
    21  }
    22  
    23  func (m Metadata) Add(key, value string) {
    24  	if values, ok := m[key]; ok {
    25  		m[key] = append(values, value)
    26  	} else {
    27  		m.Set(key, value)
    28  	}
    29  }
    30  
    31  func (m Metadata) Set(key string, values ...string) {
    32  	m[key] = values
    33  }
    34  
    35  func (m Metadata) Has(key string) bool {
    36  	_, ok := m[key]
    37  	return ok
    38  }
    39  
    40  func (m Metadata) Get(key string) string {
    41  	if v := m[key]; len(v) > 0 {
    42  		return v[0]
    43  	}
    44  	return ""
    45  }