github.com/kjk/siser@v0.0.0-20220410204903-1b1e84ea1397/pak/metadata.go (about)

     1  package pak
     2  
     3  // KV represents single key / value meta data entry
     4  type KV struct {
     5  	Key   string
     6  	Value string
     7  }
     8  
     9  // Metadata is a list of key / value pairs
    10  type Metadata struct {
    11  	Meta []KV
    12  }
    13  
    14  // Reset resest Metadata. Useful for re-using (performance)
    15  func (m *Metadata) Reset() {
    16  	m.Meta = m.Meta[:0]
    17  }
    18  
    19  // Size returns number of metadata e ntries
    20  func (m *Metadata) Size() int {
    21  	return len(m.Meta)
    22  }
    23  
    24  // Get returns value for a given key
    25  func (m *Metadata) Get(key string) (string, bool) {
    26  	for _, kv := range m.Meta {
    27  		if kv.Key == key {
    28  			return kv.Value, true
    29  		}
    30  	}
    31  	return "", false
    32  }
    33  
    34  // Set sets a value for a given key. Returns true if new value was added,
    35  // false value was updated
    36  func (m *Metadata) Set(k, v string) bool {
    37  	for i, kv := range m.Meta {
    38  		if kv.Key == k {
    39  			m.Meta[i].Value = v
    40  			return false
    41  		}
    42  	}
    43  	kv := KV{
    44  		Key:   k,
    45  		Value: v,
    46  	}
    47  	m.Meta = append(m.Meta, kv)
    48  	return true
    49  }