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 }