internal/mapWithExpiry/mapWIthExpiry.go (36 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT
package mapWithExpiry
import "time"
type mapEntry struct {
creation time.Time
content interface{}
}
// MapWithExpiry act like a map which provide a method to clean up expired entries
type MapWithExpiry struct {
ttl time.Duration
entris map[string]*mapEntry
}
func NewMapWithExpiry(ttl time.Duration) *MapWithExpiry {
return &MapWithExpiry{ttl: ttl, entris: make(map[string]*mapEntry)}
}
func (m *MapWithExpiry) CleanUp(now time.Time) {
for k, v := range m.entris {
if now.Sub(v.creation) >= m.ttl {
delete(m.entris, k)
}
}
}
func (m *MapWithExpiry) Get(key string) (interface{}, bool) {
res, ok := m.entris[key]
if ok {
return res.content, true
}
return nil, false
}
func (m *MapWithExpiry) Set(key string, content interface{}) {
m.entris[key] = &mapEntry{content: content, creation: time.Now()}
}
func (m *MapWithExpiry) Size() int {
return len(m.entris)
}
func (m *MapWithExpiry) Delete(key string) {
delete(m.entris, key)
}