Passed
Push — master ( dd6fe7...ccccae )
by eval
02:05
created

sqs.*SQS.XDeleteQueueByName   A

Complexity

Conditions 3

Size

Total Lines 13
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 10
nop 2
dl 0
loc 13
rs 9.9
c 0
b 0
f 0
1
package sqs
2
3
import (
4
	"context"
5
	"fmt"
6
7
	"github.com/evalphobia/aws-sdk-go-v2-wrapper/errors"
8
)
9
10
// XCreateQueue creates a SQS queue.
11
func (svc *SQS) XCreateQueue(ctx context.Context, queueName string) (queueURL string, err error) {
12
	resp, err := svc.CreateQueue(ctx, CreateQueueRequest{
13
		QueueName: queueName,
14
	})
15
	if err != nil {
16
		return "", err
17
	}
18
	return resp.QueueURL, nil
19
}
20
21
// XDeleteQueue deletes a SQS queue.
22
func (svc *SQS) XDeleteQueue(ctx context.Context, queueURL string) error {
23
	_, err := svc.DeleteQueue(ctx, DeleteQueueRequest{
24
		QueueURL: queueURL,
25
	})
26
	return err
27
}
28
29
// XDeleteQueueByName delete a SQS queue by queue name.
30
func (svc *SQS) XDeleteQueueByName(ctx context.Context, queueName string) error {
31
	queueURL, err := svc.XGetQueueURL(ctx, queueName)
32
	switch {
33
	case err != nil:
34
		return err
35
	case queueURL == "":
36
		return fmt.Errorf("Cannot find the queue name:[%s]", queueName)
37
	}
38
39
	_, err = svc.DeleteQueue(ctx, DeleteQueueRequest{
40
		QueueURL: queueURL,
41
	})
42
	return err
43
}
44
45
// XExistsQueue checks if the SQS queue exists or not.
46
func (svc *SQS) XExistsQueue(ctx context.Context, queueName string) (bool, error) {
47
	_, err := svc.GetQueueURL(ctx, GetQueueURLRequest{
48
		QueueName: queueName,
49
	})
50
	if err == nil {
51
		return true, nil
52
	}
53
54
	if e, ok := err.(errors.ErrorData); ok {
55
		if e.GetAWSErrCode() == "AWS.SimpleQueueService.NonExistentQueue" {
56
			return false, nil
57
		}
58
	}
59
	return false, err
60
}
61
62
// XGetQueueURL gets a SQS queue url.
63
func (svc *SQS) XGetQueueURL(ctx context.Context, queueName string) (queueURL string, err error) {
64
	resp, err := svc.GetQueueURL(ctx, GetQueueURLRequest{
65
		QueueName: queueName,
66
	})
67
	if err != nil {
68
		return "", err
69
	}
70
	return resp.QueueURL, nil
71
}
72
73
// XListAllQueueURLs lists all of the SQS queue url.
74
func (svc *SQS) XListAllQueueURLs(ctx context.Context, queuePrefix string) (queueURLs []string, err error) {
75
	resp, err := svc.ListQueues(ctx, ListQueuesRequest{
76
		QueueNamePrefix: queuePrefix,
77
	})
78
	if err != nil {
79
		return nil, err
80
	}
81
82
	results := resp.QueueURLs
83
	nextToken := resp.NextToken
84
	for nextToken != "" {
85
		resp, err := svc.ListQueues(ctx, ListQueuesRequest{
86
			QueueNamePrefix: queuePrefix,
87
			NextToken:       nextToken,
88
		})
89
		if err != nil {
90
			return nil, err
91
		}
92
93
		results = append(results, resp.QueueURLs...)
94
		nextToken = resp.NextToken
95
	}
96
97
	return results, nil
98
}
99
100
// XPurgeQueue purges messages of the queue.
101
func (svc *SQS) XPurgeQueue(ctx context.Context, queueURL string) error {
102
	_, err := svc.PurgeQueue(ctx, PurgeQueueRequest{
103
		QueueURL: queueURL,
104
	})
105
	return err
106
}
107
108
// XPurgeQueueByName purges messages of the queue by queue name.
109
func (svc *SQS) XPurgeQueueByName(ctx context.Context, queueName string) error {
110
	queueURL, err := svc.XGetQueueURL(ctx, queueName)
111
	switch {
112
	case err != nil:
113
		return err
114
	case queueURL == "":
115
		return fmt.Errorf("Cannot find the queue name:[%s]", queueName)
116
	}
117
118
	_, err = svc.PurgeQueue(ctx, PurgeQueueRequest{
119
		QueueURL: queueURL,
120
	})
121
	return err
122
}
123