-
Notifications
You must be signed in to change notification settings - Fork 149
Expand file tree
/
Copy pathinboxready_domains.go
More file actions
117 lines (92 loc) · 3.2 KB
/
inboxready_domains.go
File metadata and controls
117 lines (92 loc) · 3.2 KB
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
package mailgun
// https://documentation.mailgun.com/docs/inboxready/openapi-final/tag/Domains/
import (
"context"
"fmt"
"strconv"
"github.com/mailgun/mailgun-go/v5/internal/types/inboxready"
"github.com/mailgun/mailgun-go/v5/mtypes"
)
type ListMonitoredDomainsOptions = inboxready.GETV1InboxreadyDomainsParams
type MonitoredDomainsIterator struct {
opts ListMonitoredDomainsOptions
req *httpRequest
resp inboxready.InboxReadyGithubComMailgunInboxreadyAPIDomainListResponse
isFirst bool
err error
}
func (mg *Client) ListMonitoredDomains(opts ListMonitoredDomainsOptions) (*MonitoredDomainsIterator, error) {
// TODO(vtopc): support opts.Domain
if opts.Limit == nil || *opts.Limit == 0 {
opts.Limit = ptr(10)
}
req := newHTTPRequest(generateApiUrl(mg, mtypes.InboxreadyDomainsVersion, mtypes.InboxreadyDomainsEndpoint))
req.addParameter("limit", strconv.Itoa(*opts.Limit))
req.setClient(mg.HTTPClient())
req.setBasicAuth(basicAuthUser, mg.APIKey())
return &MonitoredDomainsIterator{
opts: opts,
req: req,
isFirst: true,
}, nil
}
func (iter *MonitoredDomainsIterator) Err() error {
return iter.err
}
// Next retrieves the next page of items from the api. Returns false when there are
// no more pages to retrieve or if there was an error.
// Use `.Err()` to retrieve the error
func (iter *MonitoredDomainsIterator) Next(ctx context.Context, resp []mtypes.MonitoredDomain) (more bool) {
if iter.err != nil {
return false
}
if iter.isFirst {
iter.isFirst = false
} else {
iter.req.URL = iter.resp.Paging.Next
}
v, err := iter.fetch(ctx)
if err != nil {
iter.err = err
return false
}
iter.resp = *v
return len(resp) == *iter.opts.Limit
}
func (iter *MonitoredDomainsIterator) fetch(ctx context.Context,
) (*inboxready.InboxReadyGithubComMailgunInboxreadyAPIDomainListResponse, error) {
httpResp, err := makeGetRequest(ctx, iter.req)
if err != nil {
return nil, err
}
var resp inboxready.InboxReadyGithubComMailgunInboxreadyAPIDomainListResponse
err = httpResp.parseFromJSON(&resp)
if err != nil {
return nil, fmt.Errorf("decoding response: %w", err)
}
return &resp, nil
}
// AddDomainToMonitoring adds a single domain to an account
func (mg *Client) AddDomainToMonitoring(ctx context.Context, opts mtypes.AddDomainToMonitoringOptions,
) (*mtypes.AddDomainToMonitoringResponse, error) {
req := newHTTPRequest(generateApiUrl(mg, mtypes.InboxreadyDomainsVersion, mtypes.InboxreadyDomainsEndpoint))
req.setBasicAuth(basicAuthUser, mg.APIKey())
req.setClient(mg.HTTPClient())
payload := newUrlEncodedPayload()
payload.addValue("domain", opts.Domain)
var resp mtypes.AddDomainToMonitoringResponse
if err := postResponseFromJSON(ctx, req, payload, &resp); err != nil {
return nil, err
}
return &resp, nil
}
// DeleteMonitoredDomain deletes a single domain from an account
func (mg *Client) DeleteMonitoredDomain(ctx context.Context, opts mtypes.DeleteMonitoredDomainOptions,
) error {
req := newHTTPRequest(generateApiUrl(mg, mtypes.InboxreadyDomainsVersion, mtypes.InboxreadyDomainsEndpoint))
req.setBasicAuth(basicAuthUser, mg.APIKey())
req.setClient(mg.HTTPClient())
req.addParameter("domain", opts.Domain)
_, err := makeDeleteRequest(ctx, req)
return err
}