keel/cache/cache.go

46 lines
1.2 KiB
Go

package cache
import (
"context"
"errors"
"time"
)
// Cache - generic cache interface
// type Cache interface {
// Put(ctx context.Context, key string, value []byte) error
// Get(ctx context.Context, key string) (value []byte, err error)
// Delete(ctx context.Context, key string) error
// List(prefix string) ([][]byte, error)
// }
type Cache interface {
Put(key string, value []byte) error
Get(key string) (value []byte, err error)
Delete(key string) error
List(prefix string) (map[string][]byte, error)
}
type expirationContextKeyType int
const expirationContextKey expirationContextKeyType = 1
// SetContextExpiration - set cache expiration context
func SetContextExpiration(ctx context.Context, expiration time.Duration) context.Context {
return context.WithValue(ctx, expirationContextKey, expiration)
}
// GetContextExpiration - gets expiration from context, returns it and also returns
// ok - true/false to indicate whether ctx value was found
func GetContextExpiration(ctx context.Context) (exp time.Duration, ok bool) {
expiration := ctx.Value(expirationContextKey)
if expiration != nil {
return expiration.(time.Duration), true
}
return 0, false
}
var (
ErrNotFound = errors.New("not found")
ErrExpired = errors.New("entry expired")
)