func()

in openapi/pager.go [143:212]


func (a *Pager) FeedResponse(body string) error {
	var j interface{}

	err := json.Unmarshal([]byte(body), &j)
	if err != nil {
		return fmt.Errorf("unmarshal %s", err.Error())
	}

	a.nextToken = ""

	if a.NextTokenExpr != "" {
		a.nextTokenMode = true
		// allow to ignore NextToken mode
		if val, err := jmespath.Search(a.NextTokenExpr, j); err == nil {
			if nextToken, ok := val.(string); ok {
				a.nextToken = nextToken
			}
		} else {
			return fmt.Errorf("jmespath: '%s' failed %s", a.NextTokenExpr, err)
		}
	}

	if !a.nextTokenMode {
		if total, err := jmespath.Search(a.TotalCountExpr, j); err == nil {
			var totalCount float64
			if strCount, ok := total.(string); ok {
				totalCount, _ = strconv.ParseFloat(strCount, 64)
			} else {
				totalCount = total.(float64)
			}
			a.totalCount = int(totalCount)
		} else {
			return fmt.Errorf("jmespath: '%s' failed %s", a.TotalCountExpr, err)
		}

		if pageNumber, err := jmespath.Search(a.PageNumberExpr, j); err == nil {
			var currentPageNumber float64
			if strpageNumber, ok := pageNumber.(string); ok {
				currentPageNumber, _ = strconv.ParseFloat(strpageNumber, 64)
			} else {
				currentPageNumber = pageNumber.(float64)
			}
			a.currentPageNumber = int(currentPageNumber)
		} else {
			return fmt.Errorf("jmespath: '%s' failed %s", a.PageNumberExpr, err)
		}

		if pageSize, err := jmespath.Search(a.PageSizeExpr, j); err == nil {
			var PageSize float64
			if strpageSize, ok := pageSize.(string); ok {
				PageSize, _ = strconv.ParseFloat(strpageSize, 64)
			} else {
				PageSize = pageSize.(float64)
			}
			a.PageSize = int(PageSize)
		} else {
			return fmt.Errorf("jmespath: '%s' failed %s", a.PageSizeExpr, err)
		}
	}

	if a.collectionPath == "" {
		p2 := a.detectArrayPath(j)
		if p2 == "" {
			return fmt.Errorf("can't auto recognize collections path: you need add `--pager path=[jmespath]` to assign manually")
		}
		a.collectionPath = p2
	}
	a.mergeCollections(j)
	return nil
}