func petByID(id int64) (*Pet, error) { for _, pet := range pets { if pet.ID == id { return &pet, nil } } return nil, errors.NotFound("not found: pet %d", id) }
func deleteItem(id int64) error { itemsLock.Lock() defer itemsLock.Unlock() _, exists := items[id] if !exists { return errors.NotFound("not found: item %d", id) } delete(items, id) return nil }
func updateItem(id int64, item *models.Item) error { if item == nil { return errors.New(500, "item must be present") } itemsLock.Lock() defer itemsLock.Unlock() _, exists := items[id] if !exists { return errors.NotFound("not found: item %d", id) } item.ID = id items[id] = item return nil }
func newRouter(ctx *Context, next http.Handler) http.Handler { if ctx.router == nil { ctx.router = DefaultRouter(ctx.spec, ctx.api) } basePath := ctx.spec.BasePath() isRoot := basePath == "" || basePath == "/" for strings.HasSuffix(basePath, "/") { basePath = basePath[:len(basePath)-1] } return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { defer context.Clear(r) // use context to lookup routes if isRoot { if _, ok := ctx.RouteInfo(r); ok { next.ServeHTTP(rw, r) return } } else { ep := r.URL.EscapedPath() if p := strings.TrimPrefix(ep, basePath); len(p) < len(ep) { r.URL.Path = p if _, ok := ctx.RouteInfo(r); ok { next.ServeHTTP(rw, r) return } } } // Not found, check if it exists in the other methods first if others := ctx.AllowedMethods(r); len(others) > 0 { ctx.Respond(rw, r, ctx.analyzer.RequiredProduces(), nil, errors.MethodNotAllowed(r.Method, others)) return } ctx.Respond(rw, r, ctx.analyzer.RequiredProduces(), nil, errors.NotFound("path %s was not found", r.URL.Path)) }) }
// NotFound the default not found responder for when no route has been matched yet func (c *Context) NotFound(rw http.ResponseWriter, r *http.Request) { c.Respond(rw, r, []string{c.api.DefaultProduces()}, nil, errors.NotFound("not found")) }