github.com/adowair/kvdb@v0.0.0-20231101174258-ceca93b03596/kv/ops.go (about) 1 package kv 2 3 import ( 4 "errors" 5 "fmt" 6 "time" 7 ) 8 9 func Get(key string) (string, error) { 10 entry, err := read(key) 11 if err != nil { 12 return "", fmt.Errorf("error getting key %s, %w", key, err) 13 } 14 return entry.Value, nil 15 } 16 17 func Set(key, val string, now time.Time) error { 18 entry := Entry{ 19 LastEdited: now, 20 Value: val, 21 } 22 23 if oldEntry, err := read(key); errors.Is(err, ErrNotExist) { 24 entry.FirstEdited = entry.LastEdited 25 } else { 26 entry.FirstEdited = oldEntry.FirstEdited 27 } 28 29 err := write(key, &entry) 30 if err != nil { 31 return fmt.Errorf("error setting key %s, %w", key, err) 32 } 33 return nil 34 } 35 36 func Timestamps(key string) (first, last time.Time, err error) { 37 entry, err := read(key) 38 if err != nil { 39 return time.Time{}, time.Time{}, fmt.Errorf( 40 "error getting timestamps for %s, %w", key, err) 41 } 42 return entry.FirstEdited, entry.LastEdited, nil 43 } 44 45 func Delete(key string) error { 46 err := delete(key) 47 if err != nil { 48 return fmt.Errorf("error deleting key %s, %w", key, err) 49 } 50 return nil 51 }