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  }