package service import ( "fmt" "dnsupdater/dns/service/digitalocean" "dnsupdater/dns/service/vultr" ) var factories = map[string]Factory{ "digitalocean": digitalocean.Factory, "vultr": vultr.Factory, } type Manager struct { services map[string]Service } func NewManager() *Manager { return &Manager{ services: make(map[string]Service), } } func (m Manager) Get(name string) Service { if service, ok := m.services[name]; ok { return service } return nil } func (m Manager) RegisterFromConfig(providers map[string]map[string]any) error { for name, args := range providers { if factory, ok := factories[name]; ok { provider, err := factory(args) if err != nil { return fmt.Errorf("could not create provider '%s': %v", name, err) } m.Register(name, provider.(Service)) } } return nil } func (m Manager) Register(name string, provider Service) { m.services[name] = provider }