av/stream/mts/meta.go

93 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
NAME
meta.go
DESCRIPTION
See Readme.md
AUTHOR
Saxon Nelson-Milton <saxon@ausocean.org>
LICENSE
meta.go is Copyright (C) 2017-2019 the Australian Ocean Lab (AusOcean)
It is free software: you can redistribute it and/or modify them
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
It is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with revid in gpl.txt. If not, see http://www.gnu.org/licenses.
*/
package mts
import (
"errors"
"sync"
)
var (
errKeyAbsent = errors.New("Key does not exist in map")
)
type Meta struct {
mu sync.RWMutex
data map[string]string
}
func NewMeta() *Meta {
return &Meta{data: make(map[string]string)}
}
// Add adds metadata with key and val, if already exists return error
func (m *Meta) Add(key, val string) {
m.mu.Lock()
m.data[key] = val
m.mu.Unlock()
}
// All returns the a copy of the map containing the meta data
func (m *Meta) All() map[string]string {
m.mu.Lock()
cpy := make(map[string]string)
for k, v := range m.data {
cpy[k] = v
}
m.mu.Unlock()
return cpy
}
// Get returns the meta data for the passed key
func (m *Meta) Get(key string) (string, error) {
m.mu.Lock()
val, ok := m.data[key]
m.mu.Unlock()
if !ok {
return "", errKeyAbsent
}
return val, nil
}
// Remove deletes a meta entry in the map and returns error if it doesnt exist
func (m *Meta) Delete(key string) error {
m.mu.Lock()
defer m.mu.Unlock()
if _, ok := m.data[key]; ok {
delete(m.data, key)
return nil
}
return errors.New("Trying to delete map entry that doesn't exist")
}
func (m *Meta) Encode() []byte {
// TODO: complete this
return []byte("someData")
}