-
Notifications
You must be signed in to change notification settings - Fork 2
/
requests.go
129 lines (103 loc) · 3.29 KB
/
requests.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package peerings
import (
"github.com/Huawei/gophercloud"
"github.com/Huawei/gophercloud/pagination"
)
type CreateOpts struct {
Name string `json:"name" required:"true"`
RequestVpcInfo VPCInfo `json:"request_vpc_info" required:"true"`
AcceptVpcInfo VPCInfo `json:"accept_vpc_info" required:"true"`
}
type CreateOptsBuilder interface {
ToPeeringCreateMap() (map[string]interface{}, error)
}
func (opts CreateOpts) ToPeeringCreateMap() (map[string]interface{}, error) {
b, err := gophercloud.BuildRequestBody(opts, "peering")
if err != nil {
return nil, err
}
return b, nil
}
func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
b, err := opts.ToPeeringCreateMap()
if err != nil {
r.Err = err
return
}
_, r.Err = client.Post(CreateURL(client), b, &r.Body, &gophercloud.RequestOpts{OkCodes: []int{201}})
return
}
func Delete(client *gophercloud.ServiceClient, peeringID string) (r DeleteResult) {
url := DeleteURL(client, peeringID)
_, r.Err = client.Delete(url, nil)
return
}
func Get(client *gophercloud.ServiceClient, peeringID string) (r GetResult) {
url := GetURL(client, peeringID)
_, r.Err = client.Get(url, &r.Body, &gophercloud.RequestOpts{})
return
}
type ListOpts struct {
// Specifies the resource ID of pagination query. If the parameter
// is left blank, only resources on the first page are queried.
Marker string `q:"marker"`
// Specifies the number of records returned on each page.
Limit int `q:"limit"`
ID string `q:"id"`
Name string `q:"name"`
Status string `q:"status"`
VpcID string `q:"vpc_id"`
TenantID string `q:"tenant_id"`
}
type ListOptsBuilder interface {
ToPeeringListQuery() (string, error)
}
func (opts ListOpts) ToPeeringListQuery() (string, error) {
q, err := gophercloud.BuildQueryString(opts)
return q.String(), err
}
func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
url := ListURL(client)
if opts != nil {
query, err := opts.ToPeeringListQuery()
if err != nil {
return pagination.Pager{Err: err}
}
url += query
}
return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
return PeeringPage{pagination.LinkedPageBase{PageResult: r}}
})
}
type UpdateOpts struct {
Name string `json:"name,omitempty"`
}
type UpdateOptsBuilder interface {
ToPeeringUpdateMap() (map[string]interface{}, error)
}
func (opts UpdateOpts) ToPeeringUpdateMap() (map[string]interface{}, error) {
b, err := gophercloud.BuildRequestBody(opts, "peering")
if err != nil {
return nil, err
}
return b, nil
}
func Update(client *gophercloud.ServiceClient, peeringID string, opts UpdateOptsBuilder) (r UpdateResult) {
b, err := opts.ToPeeringUpdateMap()
if err != nil {
r.Err = err
return
}
_, r.Err = client.Put(UpdateURL(client, peeringID), b, &r.Body, &gophercloud.RequestOpts{OkCodes: []int{200}})
return
}
func Accept(client *gophercloud.ServiceClient, peeringID string) (r ActionResult) {
url := AcceptURL(client, peeringID)
_, r.Err = client.Put(url, nil, &r.Body, &gophercloud.RequestOpts{OkCodes: []int{200}})
return
}
func Reject(client *gophercloud.ServiceClient, peeringID string) (r ActionResult) {
url := RejectURL(client, peeringID)
_, r.Err = client.Put(url, nil, &r.Body, &gophercloud.RequestOpts{OkCodes: []int{200}})
return
}