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 }