evcc-io/server/service/registry.go

36 lines
574 B
Go

package service
import (
"net/http"
"sync"
)
var (
mu sync.Mutex
registry = make(map[string]http.Handler)
)
func Register(name string, handler http.Handler) {
mu.Lock()
defer mu.Unlock()
if _, ok := registry[name]; ok {
panic("service " + name + " already registered")
}
registry[name] = handler
}
func Handler() http.Handler {
mux := http.NewServeMux()
for name, h := range registry {
// e.g. "/homes/foo"
prefix := "/" + name
// strip "/homes/foo" then hand off to h
mux.Handle(prefix+"/", http.StripPrefix(prefix, h))
}
return mux
}