package router import ( "errors" "fmt" "net/http" "git.staur.ca/stobbsm/clustvirt/cluster" "git.staur.ca/stobbsm/clustvirt/lib/log" ) type Routes []Route func addprefix(b, p string) string { return fmt.Sprintf("%s%s", b, p) } func trace(p string) string { return fmt.Sprintf("TRACE %s", p) } func options(p string) string { return fmt.Sprintf("OPTIONS %s", p) } func connect(p string) string { return fmt.Sprintf("CONNECT %s", p) } func head(p string) string { return fmt.Sprintf("HEAD %s", p) } func get(p string) string { return fmt.Sprintf("GET %s", p) } func post(p string) string { return fmt.Sprintf("POST %s", p) } func put(p string) string { return fmt.Sprintf("PUT %s", p) } func patch(p string) string { return fmt.Sprintf("PATCH %s", p) } func delete(p string) string { return fmt.Sprintf("DELETE %s", p) } func (rte Routes) MountTo(prefix string, c *cluster.Cluster, mux *http.ServeMux) error { var errs []error for _, r := range rte { switch r.Method { case http.MethodTrace: mux.Handle(trace(addprefix(prefix, r.Path)), r.Handler(c)) case http.MethodOptions: mux.Handle(options(addprefix(prefix, r.Path)), r.Handler(c)) case http.MethodConnect: mux.Handle(connect(addprefix(prefix, r.Path)), r.Handler(c)) case http.MethodHead: mux.Handle(head(addprefix(prefix, r.Path)), r.Handler(c)) case http.MethodGet: mux.Handle(get(addprefix(prefix, r.Path)), r.Handler(c)) case http.MethodPost: mux.Handle(post(addprefix(prefix, r.Path)), r.Handler(c)) case http.MethodPut: mux.Handle(put(addprefix(prefix, r.Path)), r.Handler(c)) case http.MethodPatch: mux.Handle(patch(addprefix(prefix, r.Path)), r.Handler(c)) case http.MethodDelete: mux.Handle(delete(addprefix(prefix, r.Path)), r.Handler(c)) default: mux.Handle(addprefix(prefix, r.Path), r.Handler(c)) } log.Info("Routes.MoutnTo"). Str("prefix", prefix). Str("Route.Path", r.Path). Str("Route.Method", r.Method). Msg("route registered") } return errors.Join(errs...) }