package cron import ( "fmt" "strings" "gitlab.com/uafrica/go-utils/errors" "gitlab.com/uafrica/go-utils/logger" ) type Router struct { endpoints map[string]func(Context) error } func (r Router) Endpoints() map[string]func(Context) error { return r.endpoints } func (r Router) Route(arn string) (string, func(Context) error) { for name, hdlr := range r.endpoints { if strings.Contains(arn, name) { return name, hdlr } else { logger.Debugf("ARN(%s) does not contain cronName(%s)", arn, name) } } return "", nil } //check that all endpoints are correctly defined using one of the supported handler types //return updated endpoints with additional information func NewRouter(endpoints map[string]func(Context) error) (Router, error) { countLegacyEvent := 0 countLegacyMessage := 0 countHandler := 0 for messageType, handlerFunc := range endpoints { if messageType == "" { return Router{}, errors.Errorf("blank messageType") } if messageType == "/sqs-docs" { return Router{}, errors.Errorf("%s may not be a defined endpoint - it is reserved", messageType) } if handlerFunc == nil { return Router{}, errors.Errorf("nil handler on %s", messageType) } fmt.Printf("%30.30s: OK\n", messageType) } fmt.Printf("Checked %d legacy event and %d legacy message and %d new handlers\n", countLegacyEvent, countLegacyMessage, countHandler) //add reserved endpoint to generate documentation r := Router{ endpoints: endpoints, } // { // docsHandler, err := NewHandler(GETApiDocs(r)) //endpoints)) // if err != nil { // return Router{}, errors.Wrapf(err, "failed to define handler for docs") // } // endpoints["/api-docs"] = map[string]interface{}{ // "GET": docsHandler, // } // } return r, nil }