github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/apigw/v2/env/List.go (about) 1 package env 2 3 import ( 4 "bytes" 5 6 golangsdk "github.com/opentelekomcloud/gophertelekomcloud" 7 "github.com/opentelekomcloud/gophertelekomcloud/internal/extract" 8 "github.com/opentelekomcloud/gophertelekomcloud/pagination" 9 ) 10 11 type ListOpts struct { 12 GatewayID string `json:"-"` 13 Limit int `q:"limit"` 14 Name string `q:"name"` 15 } 16 17 func List(client *golangsdk.ServiceClient, opts ListOpts) ([]EnvResp, error) { 18 q, err := golangsdk.BuildQueryString(&opts) 19 if err != nil { 20 return nil, err 21 } 22 pages, err := pagination.Pager{ 23 Client: client, 24 InitialURL: client.ServiceURL("apigw", "instances", opts.GatewayID, "envs") + q.String(), 25 CreatePage: func(r pagination.NewPageResult) pagination.NewPage { 26 return EnvPage{NewSinglePageBase: pagination.NewSinglePageBase{NewPageResult: r}} 27 }, 28 }.NewAllPages() 29 30 if err != nil { 31 return nil, err 32 } 33 return ExtractEnvs(pages) 34 } 35 36 type EnvPage struct { 37 pagination.NewSinglePageBase 38 } 39 40 func ExtractEnvs(r pagination.NewPage) ([]EnvResp, error) { 41 var s struct { 42 Gateways []EnvResp `json:"envs"` 43 } 44 err := extract.Into(bytes.NewReader((r.(EnvPage)).Body), &s) 45 return s.Gateways, err 46 }