func buildPaginationOptions()

in build-index/tagserver/server.go [453:486]


func buildPaginationOptions(u *url.URL) ([]backend.ListOption, error) {
	var opts []backend.ListOption
	q := u.Query()
	for k, v := range q {
		if len(v) != 1 {
			return nil, handler.Errorf(
				"invalid query %s:%s", k, v).Status(http.StatusBadRequest)
		}
		switch k {
		case tagmodels.LimitQ:
			limitCount, err := strconv.Atoi(v[0])
			if err != nil {
				return nil, handler.Errorf(
					"invalid limit %s: %s", v, err).Status(http.StatusBadRequest)
			}
			if limitCount == 0 {
				return nil, handler.Errorf(
					"invalid limit %d", limitCount).Status(http.StatusBadRequest)
			}
			opts = append(opts, backend.ListWithMaxKeys(limitCount))
		case tagmodels.OffsetQ:
			opts = append(opts, backend.ListWithContinuationToken(v[0]))
		default:
			return nil, handler.Errorf(
				"invalid query %s", k).Status(http.StatusBadRequest)
		}
	}
	if len(opts) > 0 {
		// Enable pagination if either or both of the query param exists.
		opts = append(opts, backend.ListWithPagination())
	}

	return opts, nil
}