github.com/gophercloud/gophercloud@v1.11.0/docs/contributor-tutorial/.template/requests.go (about)

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