github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/docs/contributor-tutorial/.template/requests.go (about)

     1  package RESOURCE
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/vnpaycloud-console/gophercloud/v2"
     7  	"github.com/vnpaycloud-console/gophercloud/v2/pagination"
     8  )
     9  
    10  // ListOptsBuilder allows extensions to add additional parameters to
    11  // the List request
    12  type ListOptsBuilder interface {
    13  	ToResourceListQuery() (string, error)
    14  }
    15  
    16  // ListOpts provides options to filter the List results.
    17  type ListOpts struct {
    18  }
    19  
    20  // ToResourceListQuery formats a ListOpts into a query string.
    21  func (opts ListOpts) ToResourceListQuery() (string, error) {
    22  	q, err := gophercloud.BuildQueryString(opts)
    23  	return q.String(), err
    24  }
    25  
    26  // List retrieves a list of RESOURCES.
    27  func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
    28  	url := listURL(client)
    29  	if opts != nil {
    30  		query, err := opts.ToResourceListQuery()
    31  		if err != nil {
    32  			return pagination.Pager{Err: err}
    33  		}
    34  		url += query
    35  	}
    36  	return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
    37  		return ResourcePage{pagination.LinkedPageBase{PageResult: r}}
    38  	})
    39  }
    40  
    41  // Get retrieves details of a RESOURCE.
    42  func Get(ctx context.Context, client *gophercloud.ServiceClient, id string) (r GetResult) {
    43  	resp, err := client.Get(ctx, getURL(client, id), &r.Body, nil)
    44  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    45  	return
    46  }
    47  
    48  // CreateOptsBuilder allows extensions to add additional parameters to
    49  // the Create request.
    50  type CreateOptsBuilder interface {
    51  	ToResourceCreateMap() (map[string]interface{}, error)
    52  }
    53  
    54  // CreateOpts provides options used to create a RESOURCE.
    55  type CreateOpts struct {
    56  }
    57  
    58  // ToResourceCreateMap formats a CreateOpts into a create request.
    59  func (opts CreateOpts) ToResourceCreateMap() (map[string]interface{}, error) {
    60  	return gophercloud.BuildRequestBody(opts, "resource")
    61  }
    62  
    63  // Create creates a new RESOURCE.
    64  func Create(ctx context.Context, client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
    65  	b, err := opts.ToResourceCreateMap()
    66  	if err != nil {
    67  		r.Err = err
    68  		return
    69  	}
    70  	resp, err := client.Post(ctx, createURL(client), &b, &r.Body, &gophercloud.RequestOpts{
    71  		OkCodes: []int{201},
    72  	})
    73  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    74  	return
    75  }
    76  
    77  // Delete deletes a RESOURCE.
    78  func Delete(ctx context.Context, client *gophercloud.ServiceClient, id string) (r DeleteResult) {
    79  	resp, err := client.Delete(ctx, deleteURL(client, id), nil)
    80  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
    81  	return
    82  }
    83  
    84  // UpdateOptsBuilder allows extensions to add additional parameters to
    85  // the Update request.
    86  type UpdateOptsBuilder interface {
    87  	ToResourceUpdateMap() (map[string]interface{}, error)
    88  }
    89  
    90  // UpdateOpts represents parameters to update a RESOURCE.
    91  type UpdateOpts struct {
    92  }
    93  
    94  // ToUpdateCreateMap formats a UpdateOpts into an update request.
    95  func (opts UpdateOpts) ToResourceUpdateMap() (map[string]interface{}, error) {
    96  	return gophercloud.BuildRequestBody(opts, "resource")
    97  }
    98  
    99  // Update modifies the attributes of a RESOURCE.
   100  func Update(ctx context.Context, client *gophercloud.ServiceClient, id string, opts UpdateOptsBuilder) (r UpdateResult) {
   101  	b, err := opts.ToResourceUpdateMap()
   102  	if err != nil {
   103  		r.Err = err
   104  		return
   105  	}
   106  	resp, err := client.Patch(ctx, updateURL(client, id), b, &r.Body, &gophercloud.RequestOpts{
   107  		OkCodes: []int{200},
   108  	})
   109  	_, r.Header, r.Err = gophercloud.ParseResponse(resp, err)
   110  	return
   111  }