package jwtx import ( "context" "fmt" "time" "github.com/patrickmn/go-cache" ) var defaultDelimiter = ":" type MemoryConfig struct { CleanupInterval time.Duration } func NewMemoryCache(cfg MemoryConfig) Cacher { return &memCache{ cache: cache.New(0, cfg.CleanupInterval), } } type memCache struct { cache *cache.Cache } func (a *memCache) getKey(ns, key string) string { return fmt.Sprintf("%s%s%s", ns, defaultDelimiter, key) } func (a *memCache) Set(ctx context.Context, ns, key, value string, expiration ...time.Duration) error { var exp time.Duration if len(expiration) > 0 { exp = expiration[0] } a.cache.Set(a.getKey(ns, key), value, exp) return nil } func (a *memCache) Get(ctx context.Context, ns, key string) (string, bool, error) { val, ok := a.cache.Get(a.getKey(ns, key)) if !ok { return "", false, nil } return val.(string), ok, nil } func (a *memCache) Exists(ctx context.Context, ns, key string) (bool, error) { _, ok := a.cache.Get(a.getKey(ns, key)) return ok, nil } func (a *memCache) Delete(ctx context.Context, ns, key string) error { a.cache.Delete(a.getKey(ns, key)) return nil } func (a *memCache) Close(ctx context.Context) error { a.cache.Flush() return nil }