github.com/sleungcy-sap/cli@v7.1.0+incompatible/api/cloudcontroller/ccv3/paginate.go (about) 1 package ccv3 2 3 import ( 4 "net/http" 5 6 "code.cloudfoundry.org/cli/api/cloudcontroller" 7 ) 8 9 func (requester RealRequester) paginate(request *cloudcontroller.Request, obj interface{}, appendToExternalList func(interface{}) error) (IncludedResources, Warnings, error) { 10 fullWarningsList := Warnings{} 11 var includes IncludedResources 12 13 for { 14 wrapper, warnings, err := requester.wrapFirstPage(request, obj, appendToExternalList) 15 fullWarningsList = append(fullWarningsList, warnings...) 16 if err != nil { 17 return IncludedResources{}, fullWarningsList, err 18 } 19 20 includes.Users = append(includes.Users, wrapper.IncludedResources.Users...) 21 includes.Organizations = append(includes.Organizations, wrapper.IncludedResources.Organizations...) 22 includes.Spaces = append(includes.Spaces, wrapper.IncludedResources.Spaces...) 23 includes.ServiceOfferings = append(includes.ServiceOfferings, wrapper.IncludedResources.ServiceOfferings...) 24 includes.ServiceBrokers = append(includes.ServiceBrokers, wrapper.IncludedResources.ServiceBrokers...) 25 26 if wrapper.NextPage() == "" { 27 break 28 } 29 30 request, err = requester.newHTTPRequest(requestOptions{ 31 URL: wrapper.NextPage(), 32 Method: http.MethodGet, 33 }) 34 if err != nil { 35 return IncludedResources{}, fullWarningsList, err 36 } 37 } 38 39 return includes, fullWarningsList, nil 40 } 41 42 func (requester RealRequester) wrapFirstPage(request *cloudcontroller.Request, obj interface{}, appendToExternalList func(interface{}) error) (*PaginatedResources, Warnings, error) { 43 warnings := Warnings{} 44 wrapper := NewPaginatedResources(obj) 45 response := cloudcontroller.Response{ 46 DecodeJSONResponseInto: &wrapper, 47 } 48 49 err := requester.connection.Make(request, &response) 50 warnings = append(warnings, response.Warnings...) 51 if err != nil { 52 return nil, warnings, err 53 } 54 55 list, err := wrapper.Resources() 56 if err != nil { 57 return nil, warnings, err 58 } 59 60 for _, item := range list { 61 err = appendToExternalList(item) 62 if err != nil { 63 return nil, warnings, err 64 } 65 } 66 67 return wrapper, warnings, nil 68 }