1
0
Fork 0
mirror of https://gitlab.com/pnx-tools/dns-updater.git synced 2026-06-16 05:54:56 +02:00
dns-updater/ip/cache.go

43 lines
748 B
Go

package ip
import (
"errors"
"net"
)
type CacheDefaultCallback func(name string) (net.IP, error)
type Cache struct {
items map[string]net.IP
}
func NewCache() *Cache {
return &Cache{
items: make(map[string]net.IP),
}
}
func (c Cache) Get(name string) (net.IP, error) {
// Return cached entry.
if cached, ok := c.items[name]; ok {
return cached, nil
}
return nil, errors.New("key did not exist")
}
func (c Cache) GetWithDefault(name string, callback CacheDefaultCallback) (net.IP, error) {
// Return cached entry.
if cached, ok := c.items[name]; ok {
return cached, nil
}
ip, err := callback(name)
if err == nil {
c.Set(name, ip)
}
return ip, err
}
func (c *Cache) Set(name string, ip net.IP) {
c.items[name] = ip
}