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
}