-
Notifications
You must be signed in to change notification settings - Fork 6
/
send.go
108 lines (93 loc) · 3.33 KB
/
send.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
package mocksqs
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/service/sqs"
"github.com/google/uuid"
"time"
)
// SendMessage is partially supported. The following are not supported:
//
// - SendMessageInput.DelaySeconds
//
// - SendMessageInput.MessageAttributes
//
// - SendMessageInput.MessageDeduplicationId
//
// - SendMessageInput.MessageGroupId
//
// - SendMessageInput.MessageSystemAttributes
//
// - SendMessageOutput.MD5OfMessageAttributes
//
// - SendMessageOutput.MD5OfMessageBody
//
// - SendMessageOutput.MD5OfMessageSystemAttributes
//
// - SendMessageOutput.MessageId
//
// - SendMessageOutput.SequenceNumber
//
func (client *SQS) SendMessage(input *sqs.SendMessageInput) (*sqs.SendMessageOutput, error) {
return client.SendMessageWithContext(context.TODO(), input, nil)
}
func (client *SQS) sendMessage(input *sqs.SendMessageInput) (*sqs.SendMessageOutput, error) {
err := checkRequiredFields(map[string]interface{}{
"SendMessageInput.QueueUrl": input.QueueUrl,
"SendMessageInput.MessageBody": input.MessageBody,
})
if err != nil {
return &sqs.SendMessageOutput{}, err
}
if *input.MessageBody == "" {
return &sqs.SendMessageOutput{}, errorMissingParameter("MessageBody")
}
if input.DelaySeconds != nil && (*input.DelaySeconds < 0 || *input.DelaySeconds > 900) {
return &sqs.SendMessageOutput{}, errorInvalidParameterValue(
fmt.Sprintf("Value %d for parameter DelaySeconds is invalid. Reason: DelaySeconds must be >= 0 and <= 900.",
*input.DelaySeconds))
}
if queue := client.GetQueue(*input.QueueUrl); queue != nil {
receiptHandle := uuid.New().String()
queue.messages.Set(receiptHandle, &Message{
Message: sqs.Message{
Body: input.MessageBody,
ReceiptHandle: aws.String(receiptHandle),
},
VisibleAfter: time.Now(),
})
return &sqs.SendMessageOutput{}, nil
}
return &sqs.SendMessageOutput{}, errorNonExistentQueue()
}
// SendMessageWithContext is partially supported. The following are not supported:
//
// - Recording ctx
//
// - Recording opts
//
// - Also see all features not supported for SendMessage()
func (client *SQS) SendMessageWithContext(ctx aws.Context, input *sqs.SendMessageInput, opts ...request.Option) (*sqs.SendMessageOutput, error) {
client.httpRequest()
client.Lock()
defer client.Unlock()
return client.sendMessage(input)
}
// SendMessageRequest is not implemented. It will panic in all cases.
func (client *SQS) SendMessageRequest(*sqs.SendMessageInput) (*request.Request, *sqs.SendMessageOutput) {
panic("SendMessageRequest is not implemented")
}
// SendMessageBatch is not implemented. It will panic in all cases.
func (client *SQS) SendMessageBatch(*sqs.SendMessageBatchInput) (*sqs.SendMessageBatchOutput, error) {
panic("SendMessageBatch is not implemented")
}
// SendMessageBatchWithContext is not implemented. It will panic in all cases.
func (client *SQS) SendMessageBatchWithContext(aws.Context, *sqs.SendMessageBatchInput, ...request.Option) (*sqs.SendMessageBatchOutput, error) {
panic("SendMessageBatchWithContext is not implemented")
}
// SendMessageBatchRequest is not implemented. It will panic in all cases.
func (client *SQS) SendMessageBatchRequest(*sqs.SendMessageBatchInput) (*request.Request, *sqs.SendMessageBatchOutput) {
panic("SendMessageBatchRequest is not implemented")
}