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  }