mirror of
https://gitlab.com/pnx-tools/dns-updater.git
synced 2026-06-16 05:54:56 +02:00
43 lines
748 B
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
|
|
}
|