github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/pagination/list_all.go (about) 1 package pagination 2 3 import ( 4 "fmt" 5 6 "github.com/chnsz/golangsdk" 7 ) 8 9 // the query type that can be supported 10 const ( 11 Marker string = "marker" // limit + marker 12 Offset = "offset" // limit + offset 13 PageSize = "page" // pagesize + page 14 ) 15 16 // QueryOpts is the operation for ListAllItems 17 // currently, you can change the default marker field with `MarkerField` 18 type QueryOpts struct { 19 MarkerField string 20 } 21 22 // ListAllItems is the method to get all pages from initialURL 23 func ListAllItems(client *golangsdk.ServiceClient, qType string, initialURL string, 24 opts *QueryOpts) (interface{}, error) { 25 26 var queryPage Pager 27 switch qType { 28 case Marker: 29 pageBuilder := func(r PageResult) Page { 30 p := MarkerPageBase{PageResult: r} 31 if opts != nil && opts.MarkerField != "" { 32 p.setMarkerField(opts.MarkerField) 33 } 34 p.Owner = p 35 return p 36 } 37 38 queryPage = NewPager(client, initialURL, pageBuilder) 39 case Offset: 40 pageBuilder := func(r PageResult) Page { 41 return OffsetPageBase{PageResult: r} 42 } 43 44 queryPage = NewPager(client, initialURL, pageBuilder) 45 case PageSize: 46 pageBuilder := func(r PageResult) Page { 47 return PageSizeBase{PageResult: r} 48 } 49 50 queryPage = NewPager(client, initialURL, pageBuilder) 51 default: 52 err := golangsdk.ErrUnexpectedType{} 53 err.Expected = fmt.Sprintf("%s/%s/%s", Marker, Offset, PageSize) 54 err.Actual = qType 55 return nil, err 56 } 57 58 queryPage.Headers = map[string]string{"Content-Type": "application/json;charset=utf8"} 59 pages, err := queryPage.AllPages() 60 if err != nil { 61 return nil, err 62 } 63 return pages.GetBody(), nil 64 }