Passed
Push — master ( 715886...74726c )
by eval
06:41 queued 04:58
created

ses.XSendBulkTemplatedEmailRequest.ToRequest   B

Complexity

Conditions 6

Size

Total Lines 26
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 18
nop 0
dl 0
loc 26
rs 8.5666
c 0
b 0
f 0
1
package ses
2
3
import (
4
	"context"
5
	"encoding/json"
6
	"fmt"
7
)
8
9
// XSendBulkTemplatedEmail sends bulk template emails.
10
func (svc *SES) XSendBulkTemplatedEmail(ctx context.Context, r XSendBulkTemplatedEmailRequest) (*SendBulkTemplatedEmailResult, error) {
11
	req, err := r.ToRequest()
12
	if err != nil {
13
		return nil, err
14
	}
15
16
	return svc.SendBulkTemplatedEmail(ctx, req)
17
}
18
19
// XSendBulkTemplatedEmailEachList sends bulk template emails.
20
func (svc *SES) XSendBulkTemplatedEmailEachList(ctx context.Context, template, from string, to []string, templateData []map[string]interface{}) (*SendBulkTemplatedEmailResult, error) {
21
	if len(templateData) != 0 && len(to) != len(templateData) {
22
		return nil, fmt.Errorf("list size does not mutch: to:[%d], status:[%d]", len(to), len(templateData))
23
	}
24
25
	req := XSendBulkTemplatedEmailRequest{
26
		From:     from,
27
		Template: template,
28
	}
29
30
	if len(to) != 0 {
31
		list := make([]XBulkEmailDestination, len(to))
32
		useTemplateData := len(templateData) != 0
33
		for i := range to {
34
			v := XBulkEmailDestination{
35
				To: []string{to[i]},
36
			}
37
			if useTemplateData {
38
				v.TemplateData = templateData[i]
39
			}
40
			list[i] = v
41
		}
42
		req.Destinations = list
43
	}
44
45
	return svc.XSendBulkTemplatedEmail(ctx, req)
46
}
47
48
// XSendBulkTemplatedEmailRequest has parameters for `XSendBulkTemplatedEmail` function.
49
type XSendBulkTemplatedEmailRequest struct {
50
	Destinations []XBulkEmailDestination
51
	From         string
52
	Template     string
53
54
	// optional
55
	DefaultTemplateData map[string]interface{}
56
}
57
58
// ToRequest converts to SendBulkTemplatedEmailRequest.
59
func (r XSendBulkTemplatedEmailRequest) ToRequest() (SendBulkTemplatedEmailRequest, error) {
60
	req := SendBulkTemplatedEmailRequest{
61
		Template: r.Template,
62
		Source:   r.From,
63
	}
64
65
	if len(r.Destinations) != 0 {
66
		list := make([]BulkEmailDestination, len(r.Destinations))
67
		for i, v := range r.Destinations {
68
			vv, err := v.ToRequest()
69
			if err != nil {
70
				return req, err
71
			}
72
			list[i] = vv
73
		}
74
		req.Destinations = list
75
	}
76
77
	if len(r.DefaultTemplateData) != 0 {
78
		b, err := json.Marshal(r.DefaultTemplateData)
79
		if err != nil {
80
			return req, err
81
		}
82
		req.DefaultTemplateData = string(b)
83
	}
84
	return req, nil
85
}
86
87
type XBulkEmailDestination struct {
0 ignored issues
show
introduced by
exported type XBulkEmailDestination should have comment or be unexported
Loading history...
88
	To []string
89
90
	// optional
91
	Cc           []string
92
	Bcc          []string
93
	TemplateData map[string]interface{}
94
}
95
96
func (r XBulkEmailDestination) ToRequest() (BulkEmailDestination, error) {
0 ignored issues
show
introduced by
exported method XBulkEmailDestination.ToRequest should have comment or be unexported
Loading history...
97
	req := BulkEmailDestination{
98
		Destination: Destination{
99
			ToAddresses:  r.To,
100
			CcAddresses:  r.Cc,
101
			BccAddresses: r.Bcc,
102
		},
103
	}
104
105
	if len(r.TemplateData) == 0 {
106
		b, err := json.Marshal(r.TemplateData)
107
		if err != nil {
108
			return req, err
109
		}
110
		req.ReplacementTemplateData = string(b)
111
	}
112
	return req, nil
113
}
114