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 }