api/internal/endpoint/registration.go
Peter Kurfer d70ba748f5 Introduce Lifecycle for every endpoint and manage listeners in the renamed Orchestrator
- merge packages to get a more concise layout because plugins are no more and therefore there's not a lot to be exported
- fix test logger
- rework config parsing to be easier and more transparent
- remove unnecessary APIs because dynamic endpoint handling is rather a won't implement
2021-02-10 20:26:45 +00:00

47 lines
1.4 KiB
Go

//go:generate mockgen -source=$GOFILE -destination=./../../internal/mock/endpoint/handler_registry.mock.go -package=endpoint_mock
package endpoint
import (
"fmt"
)
type Registration func(registry HandlerRegistry) error
type HandlerRegistry interface {
RegisterHandler(handlerRef HandlerReference, handlerProvider func() ProtocolHandler)
AvailableHandlers() []HandlerReference
HandlerForName(handlerRef HandlerReference) (ProtocolHandler, bool)
}
func NewHandlerRegistry() HandlerRegistry {
return &handlerRegistry{
handlers: make(map[HandlerReference]func() ProtocolHandler),
}
}
type handlerRegistry struct {
handlers map[HandlerReference]func() ProtocolHandler
}
func (h handlerRegistry) AvailableHandlers() (availableHandlers []HandlerReference) {
for s := range h.handlers {
availableHandlers = append(availableHandlers, s)
}
return
}
func (h *handlerRegistry) HandlerForName(handlerRef HandlerReference) (instance ProtocolHandler, ok bool) {
var provider func() ProtocolHandler
if provider, ok = h.handlers[handlerRef.ToLower()]; ok {
instance = provider()
}
return
}
func (h *handlerRegistry) RegisterHandler(handlerRef HandlerReference, handlerProvider func() ProtocolHandler) {
handlerRef = handlerRef.ToLower()
if _, exists := h.handlers[handlerRef]; exists {
panic(fmt.Sprintf("handler with name %s is already registered - there's something strange...in the neighborhood", handlerRef))
}
h.handlers[handlerRef] = handlerProvider
}