github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/dns/v2/endpoints/requests.go (about)

     1  package endpoints
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"github.com/chnsz/golangsdk"
     7  	"github.com/chnsz/golangsdk/pagination"
     8  )
     9  
    10  type ListOpts struct {
    11  	Direction string `q:"direction" required:"true"`
    12  	VpcID     string `q:"vpc_id,omitempty"`
    13  	Limit     int    `q:"limit,omitempty"`
    14  	Offset    int    `q:"offset,omitempty"`
    15  }
    16  
    17  type CreateOpt struct {
    18  	Name        string        `json:"name" required:"true"`
    19  	Direction   string        `json:"direction" required:"true"`
    20  	Region      string        `json:"region" required:"true"`
    21  	IPAddresses []IPAddresses `json:"ipaddresses" required:"true"`
    22  }
    23  
    24  type IPAddresses struct {
    25  	SubnetID string `json:"subnet_id" required:"true"`
    26  	IP       string `json:"ip,omitempty"`
    27  }
    28  
    29  type UpdateOpts struct {
    30  	Name string `json:"name" required:"true"`
    31  }
    32  
    33  func Create(c *golangsdk.ServiceClient, opts CreateOpt) (r CreateResult) {
    34  	_, err := c.Post(baseUrl(c), opts, &r.Body, nil)
    35  	if err != nil {
    36  		r.Err = err
    37  	}
    38  	return r
    39  }
    40  
    41  func Get(c *golangsdk.ServiceClient, endpointID string) (r GetResult) {
    42  	_, r.Err = c.Get(resourceUrl(c, endpointID), &r.Body, nil)
    43  	return r
    44  }
    45  
    46  func Update(c *golangsdk.ServiceClient, endpointID string, opts UpdateOpts) (r UpdateResult) {
    47  	_, r.Err = c.Put(resourceUrl(c, endpointID), opts, &r.Body, nil)
    48  	return
    49  }
    50  
    51  func Delete(c *golangsdk.ServiceClient, endpointID string) (r DeleteResult) {
    52  	_, r.Err = c.Delete(resourceUrl(c, endpointID), nil)
    53  	return
    54  }
    55  
    56  func List(c *golangsdk.ServiceClient, opts ListOpts) ([]Endpoint, error) {
    57  	url := baseUrl(c)
    58  	query, err := golangsdk.BuildQueryString(opts)
    59  	if err != nil {
    60  		return nil, err
    61  	}
    62  	url += query.String()
    63  
    64  	resp, err := pagination.ListAllItems(c, pagination.Offset, url, nil)
    65  	if err != nil {
    66  		return nil, err
    67  	}
    68  
    69  	body, err := json.Marshal(resp)
    70  	if err != nil {
    71  		return nil, err
    72  	}
    73  
    74  	var e struct {
    75  		Instances []Endpoint `json:"endpoints"`
    76  	}
    77  	if err = json.Unmarshal(body, &e); err != nil {
    78  		return nil, err
    79  	}
    80  	return e.Instances, nil
    81  }