-
Notifications
You must be signed in to change notification settings - Fork 541
/
address.go
326 lines (281 loc) · 10.5 KB
/
address.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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
package email_routing
import (
"context"
"fmt"
"net/http"
"net/url"
"time"
"github.com/cloudflare/cloudflare-go/v2/internal/apijson"
"github.com/cloudflare/cloudflare-go/v2/internal/apiquery"
"github.com/cloudflare/cloudflare-go/v2/internal/pagination"
"github.com/cloudflare/cloudflare-go/v2/internal/param"
"github.com/cloudflare/cloudflare-go/v2/internal/requestconfig"
"github.com/cloudflare/cloudflare-go/v2/option"
"github.com/cloudflare/cloudflare-go/v2/shared"
)
// AddressService contains methods and other services that help with interacting
// with the cloudflare API. Note, unlike clients, this service does not read
// variables from the environment automatically. You should not instantiate this
// service directly, and instead use the [NewAddressService] method instead.
type AddressService struct {
Options []option.RequestOption
}
// NewAddressService generates a new service that applies the given options to each
// request. These options are applied after the parent client's options (if there
// is one), and before any request-specific options.
func NewAddressService(opts ...option.RequestOption) (r *AddressService) {
r = &AddressService{}
r.Options = opts
return
}
// Create a destination address to forward your emails to. Destination addresses
// need to be verified before they can be used.
func (r *AddressService) New(ctx context.Context, accountIdentifier string, body AddressNewParams, opts ...option.RequestOption) (res *Address, err error) {
opts = append(r.Options[:], opts...)
var env AddressNewResponseEnvelope
path := fmt.Sprintf("accounts/%s/email/routing/addresses", accountIdentifier)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &env, opts...)
if err != nil {
return
}
res = &env.Result
return
}
// Lists existing destination addresses.
func (r *AddressService) List(ctx context.Context, accountIdentifier string, query AddressListParams, opts ...option.RequestOption) (res *pagination.V4PagePaginationArray[Address], err error) {
var raw *http.Response
opts = append(r.Options, opts...)
opts = append([]option.RequestOption{option.WithResponseInto(&raw)}, opts...)
path := fmt.Sprintf("accounts/%s/email/routing/addresses", accountIdentifier)
cfg, err := requestconfig.NewRequestConfig(ctx, http.MethodGet, path, query, &res, opts...)
if err != nil {
return nil, err
}
err = cfg.Execute()
if err != nil {
return nil, err
}
res.SetPageConfig(cfg, raw)
return res, nil
}
// Lists existing destination addresses.
func (r *AddressService) ListAutoPaging(ctx context.Context, accountIdentifier string, query AddressListParams, opts ...option.RequestOption) *pagination.V4PagePaginationArrayAutoPager[Address] {
return pagination.NewV4PagePaginationArrayAutoPager(r.List(ctx, accountIdentifier, query, opts...))
}
// Deletes a specific destination address.
func (r *AddressService) Delete(ctx context.Context, accountIdentifier string, destinationAddressIdentifier string, opts ...option.RequestOption) (res *Address, err error) {
opts = append(r.Options[:], opts...)
var env AddressDeleteResponseEnvelope
path := fmt.Sprintf("accounts/%s/email/routing/addresses/%s", accountIdentifier, destinationAddressIdentifier)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &env, opts...)
if err != nil {
return
}
res = &env.Result
return
}
// Gets information for a specific destination email already created.
func (r *AddressService) Get(ctx context.Context, accountIdentifier string, destinationAddressIdentifier string, opts ...option.RequestOption) (res *Address, err error) {
opts = append(r.Options[:], opts...)
var env AddressGetResponseEnvelope
path := fmt.Sprintf("accounts/%s/email/routing/addresses/%s", accountIdentifier, destinationAddressIdentifier)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &env, opts...)
if err != nil {
return
}
res = &env.Result
return
}
type Address struct {
// Destination address identifier.
ID string `json:"id"`
// The date and time the destination address has been created.
Created time.Time `json:"created" format:"date-time"`
// The contact email address of the user.
Email string `json:"email"`
// The date and time the destination address was last modified.
Modified time.Time `json:"modified" format:"date-time"`
// Destination address tag. (Deprecated, replaced by destination address
// identifier)
Tag string `json:"tag"`
// The date and time the destination address has been verified. Null means not
// verified yet.
Verified time.Time `json:"verified" format:"date-time"`
JSON addressJSON `json:"-"`
}
// addressJSON contains the JSON metadata for the struct [Address]
type addressJSON struct {
ID apijson.Field
Created apijson.Field
Email apijson.Field
Modified apijson.Field
Tag apijson.Field
Verified apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *Address) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r addressJSON) RawJSON() string {
return r.raw
}
type AddressNewParams struct {
// The contact email address of the user.
Email param.Field[string] `json:"email,required"`
}
func (r AddressNewParams) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
type AddressNewResponseEnvelope struct {
Errors []shared.ResponseInfo `json:"errors,required"`
Messages []shared.ResponseInfo `json:"messages,required"`
// Whether the API call was successful
Success AddressNewResponseEnvelopeSuccess `json:"success,required"`
Result Address `json:"result"`
JSON addressNewResponseEnvelopeJSON `json:"-"`
}
// addressNewResponseEnvelopeJSON contains the JSON metadata for the struct
// [AddressNewResponseEnvelope]
type addressNewResponseEnvelopeJSON struct {
Errors apijson.Field
Messages apijson.Field
Success apijson.Field
Result apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *AddressNewResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r addressNewResponseEnvelopeJSON) RawJSON() string {
return r.raw
}
// Whether the API call was successful
type AddressNewResponseEnvelopeSuccess bool
const (
AddressNewResponseEnvelopeSuccessTrue AddressNewResponseEnvelopeSuccess = true
)
func (r AddressNewResponseEnvelopeSuccess) IsKnown() bool {
switch r {
case AddressNewResponseEnvelopeSuccessTrue:
return true
}
return false
}
type AddressListParams struct {
// Sorts results in an ascending or descending order.
Direction param.Field[AddressListParamsDirection] `query:"direction"`
// Page number of paginated results.
Page param.Field[float64] `query:"page"`
// Maximum number of results per page.
PerPage param.Field[float64] `query:"per_page"`
// Filter by verified destination addresses.
Verified param.Field[AddressListParamsVerified] `query:"verified"`
}
// URLQuery serializes [AddressListParams]'s query parameters as `url.Values`.
func (r AddressListParams) URLQuery() (v url.Values) {
return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
ArrayFormat: apiquery.ArrayQueryFormatRepeat,
NestedFormat: apiquery.NestedQueryFormatBrackets,
})
}
// Sorts results in an ascending or descending order.
type AddressListParamsDirection string
const (
AddressListParamsDirectionAsc AddressListParamsDirection = "asc"
AddressListParamsDirectionDesc AddressListParamsDirection = "desc"
)
func (r AddressListParamsDirection) IsKnown() bool {
switch r {
case AddressListParamsDirectionAsc, AddressListParamsDirectionDesc:
return true
}
return false
}
// Filter by verified destination addresses.
type AddressListParamsVerified bool
const (
AddressListParamsVerifiedTrue AddressListParamsVerified = true
AddressListParamsVerifiedFalse AddressListParamsVerified = false
)
func (r AddressListParamsVerified) IsKnown() bool {
switch r {
case AddressListParamsVerifiedTrue, AddressListParamsVerifiedFalse:
return true
}
return false
}
type AddressDeleteResponseEnvelope struct {
Errors []shared.ResponseInfo `json:"errors,required"`
Messages []shared.ResponseInfo `json:"messages,required"`
// Whether the API call was successful
Success AddressDeleteResponseEnvelopeSuccess `json:"success,required"`
Result Address `json:"result"`
JSON addressDeleteResponseEnvelopeJSON `json:"-"`
}
// addressDeleteResponseEnvelopeJSON contains the JSON metadata for the struct
// [AddressDeleteResponseEnvelope]
type addressDeleteResponseEnvelopeJSON struct {
Errors apijson.Field
Messages apijson.Field
Success apijson.Field
Result apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *AddressDeleteResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r addressDeleteResponseEnvelopeJSON) RawJSON() string {
return r.raw
}
// Whether the API call was successful
type AddressDeleteResponseEnvelopeSuccess bool
const (
AddressDeleteResponseEnvelopeSuccessTrue AddressDeleteResponseEnvelopeSuccess = true
)
func (r AddressDeleteResponseEnvelopeSuccess) IsKnown() bool {
switch r {
case AddressDeleteResponseEnvelopeSuccessTrue:
return true
}
return false
}
type AddressGetResponseEnvelope struct {
Errors []shared.ResponseInfo `json:"errors,required"`
Messages []shared.ResponseInfo `json:"messages,required"`
// Whether the API call was successful
Success AddressGetResponseEnvelopeSuccess `json:"success,required"`
Result Address `json:"result"`
JSON addressGetResponseEnvelopeJSON `json:"-"`
}
// addressGetResponseEnvelopeJSON contains the JSON metadata for the struct
// [AddressGetResponseEnvelope]
type addressGetResponseEnvelopeJSON struct {
Errors apijson.Field
Messages apijson.Field
Success apijson.Field
Result apijson.Field
raw string
ExtraFields map[string]apijson.Field
}
func (r *AddressGetResponseEnvelope) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}
func (r addressGetResponseEnvelopeJSON) RawJSON() string {
return r.raw
}
// Whether the API call was successful
type AddressGetResponseEnvelopeSuccess bool
const (
AddressGetResponseEnvelopeSuccessTrue AddressGetResponseEnvelopeSuccess = true
)
func (r AddressGetResponseEnvelopeSuccess) IsKnown() bool {
switch r {
case AddressGetResponseEnvelopeSuccessTrue:
return true
}
return false
}