github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/resource/resourcev1/management/pagination.go (about) 1 package management 2 3 import ( 4 "encoding/json" 5 "reflect" 6 "strings" 7 ) 8 9 type GenericPaginatedResourcesHandler struct { 10 resourceType reflect.Type 11 } 12 13 func NewRCPaginatedResources(resource interface{}) GenericPaginatedResourcesHandler { 14 return GenericPaginatedResourcesHandler{ 15 resourceType: reflect.TypeOf(resource), 16 } 17 } 18 19 func (pr GenericPaginatedResourcesHandler) Resources(bytes []byte, curURL string) ([]interface{}, string, error) { 20 var paginatedResources = struct { 21 NextUrl string `json:"next_url"` 22 ResourcesBytes json.RawMessage `json:"resources"` 23 }{} 24 25 err := json.Unmarshal(bytes, &paginatedResources) 26 27 slicePtr := reflect.New(reflect.SliceOf(pr.resourceType)) 28 dc := json.NewDecoder(strings.NewReader(string(paginatedResources.ResourcesBytes))) 29 dc.UseNumber() 30 err = dc.Decode(slicePtr.Interface()) 31 slice := reflect.Indirect(slicePtr) 32 33 contents := make([]interface{}, 0, slice.Len()) 34 for i := 0; i < slice.Len(); i++ { 35 contents = append(contents, slice.Index(i).Interface()) 36 } 37 38 return contents, paginatedResources.NextUrl, err 39 }