core/discovery/discovery.go

48 lines
770 B
Go
Raw Normal View History

2024-01-06 20:49:24 +00:00
package discovery
import (
"net/url"
"os"
)
var Default = NewService()
type Provider interface {
Discover(serviceUrn string) (*url.URL, error)
}
type Service struct {
token string
providers []Provider
}
func (s *Service) Discover(serviceUrn string) (*url.URL, error) {
for idx := range s.providers {
provider := s.providers[idx]
u, err := provider.Discover(serviceUrn)
if err == nil {
return u, nil
}
}
return nil, os.ErrNotExist
}
func (s *Service) WithToken(token string) *Service {
s.token = token
return s
}
func (s *Service) WithProvider(provider Provider) *Service {
s.providers = append(s.providers, provider)
return s
}
func NewService() *Service {
return &Service{
providers: []Provider{
NewLocalDiscovery(),
},
}
}