func gatherOperations(specDoc *spec.Document, operationIDs []string) map[string]spec.Operation { operations := make(map[string]spec.Operation) for _, pathItem := range specDoc.Operations() { for _, operation := range pathItem { if len(operationIDs) == 0 || containsString(operationIDs, operation.ID) { nm := ensureUniqueName(operation.ID, operations) operations[nm] = *operation } } } return operations }
func newRoutableUntypedAPI(spec *spec.Document, api *untyped.API, context *Context) *routableUntypedAPI { var handlers map[string]map[string]http.Handler if spec == nil || api == nil { return nil } for method, hls := range spec.Operations() { um := strings.ToUpper(method) for path, op := range hls { schemes := spec.SecurityDefinitionsFor(op) if oh, ok := api.OperationHandlerFor(method, path); ok { if handlers == nil { handlers = make(map[string]map[string]http.Handler) } if b, ok := handlers[um]; !ok || b == nil { handlers[um] = make(map[string]http.Handler) } handlers[um][path] = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // lookup route info in the context route, _ := context.RouteInfo(r) // bind and validate the request using reflection bound, validation := context.BindAndValidate(r, route) if validation != nil { context.Respond(w, r, route.Produces, route, validation) return } // actually handle the request result, err := oh.Handle(bound) if err != nil { // respond with failure context.Respond(w, r, route.Produces, route, err) return } // respond with success context.Respond(w, r, route.Produces, route, result) }) if len(schemes) > 0 { handlers[um][path] = newSecureAPI(context, handlers[um][path]) } } } } return &routableUntypedAPI{ api: api, handlers: handlers, defaultProduces: api.DefaultProduces, defaultConsumes: api.DefaultConsumes, } }
func gatherOperations(specDoc *spec.Document, operationIDs []string) map[string]opRef { operations := make(map[string]opRef) for method, pathItem := range specDoc.Operations() { for path, operation := range pathItem { if len(operationIDs) == 0 || containsString(operationIDs, operation.ID) { nm := ensureUniqueName(operation.ID, method, path, operations) vv := *operation vv.ID = nm operations[nm] = opRef{ Method: method, Path: path, Op: vv, } } } } return operations }
// DefaultRouter creates a default implemenation of the router func DefaultRouter(spec *spec.Document, api RoutableAPI) Router { builder := newDefaultRouteBuilder(spec, api) if spec != nil { for method, paths := range spec.Operations() { for path, operation := range paths { builder.AddRoute(method, path, operation) } } } return builder.Build() }
func gatherOperations(specDoc *spec.Document, operationIDs []string) map[string]opRef { var oprefs opRefs for method, pathItem := range specDoc.Operations() { for path, operation := range pathItem { // nm := ensureUniqueName(operation.ID, method, path, operations) vv := *operation oprefs = append(oprefs, opRef{ Key: swag.ToGoName(strings.ToLower(method) + " " + path), Method: method, Path: path, ID: vv.ID, Op: &vv, }) } } sort.Sort(oprefs) operations := make(map[string]opRef) for _, opr := range oprefs { nm := opr.ID if nm == "" { nm = opr.Key } _, found := operations[nm] if found { nm = opr.Key } if len(operationIDs) == 0 || containsString(operationIDs, opr.ID) || containsString(operationIDs, nm) { opr.ID = nm opr.Op.ID = nm operations[nm] = opr } } return operations }