-
Notifications
You must be signed in to change notification settings - Fork 151
/
custom_sqs.go
91 lines (77 loc) · 2.51 KB
/
custom_sqs.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
package mnq
import (
"context"
"strings"
"github.com/fatih/color"
"github.com/scaleway/scaleway-cli/v2/internal/core"
"github.com/scaleway/scaleway-cli/v2/internal/human"
mnq "github.com/scaleway/scaleway-sdk-go/api/mnq/v1beta1"
)
var (
mnqSqsInfoStatusMarshalSpecs = human.EnumMarshalSpecs{
mnq.SqsInfoStatusUnknownStatus: &human.EnumMarshalSpec{Attribute: color.Faint},
mnq.SqsInfoStatusEnabled: &human.EnumMarshalSpec{Attribute: color.FgGreen},
mnq.SqsInfoStatusDisabled: &human.EnumMarshalSpec{Attribute: color.FgRed},
}
)
func mnqSqsListCredentialsBuilder(c *core.Command) *core.Command {
c.ArgSpecs.GetByName("project-id").AutoCompleteFunc = autocompleteSqsProjectID
return c
}
func mnqSqsGetCredentialsBuilder(c *core.Command) *core.Command {
c.ArgSpecs.GetByName("sqs-credentials-id").AutoCompleteFunc = autocompleteSqsCredentialsID
return c
}
var completeSqsInfoCache *mnq.SqsInfo
func autocompleteSqsProjectID(ctx context.Context, prefix string, request any) core.AutocompleteSuggestions {
_ = prefix
req := request.(*mnq.SqsAPIListSqsCredentialsRequest)
suggestions := core.AutocompleteSuggestions(nil)
client := core.ExtractClient(ctx)
api := mnq.NewSqsAPI(client)
if completeSqsInfoCache == nil {
res, err := api.GetSqsInfo(&mnq.SqsAPIGetSqsInfoRequest{
Region: req.Region,
})
if err != nil {
return nil
}
completeSqsInfoCache = res
}
suggestions = append(suggestions, completeSqsInfoCache.ProjectID)
return suggestions
}
var completeSqsListCredentials *mnq.ListSqsCredentialsResponse
func autocompleteSqsCredentialsID(ctx context.Context, prefix string, request any) core.AutocompleteSuggestions {
req := request.(*mnq.SqsAPIGetSqsCredentialsRequest)
suggestions := core.AutocompleteSuggestions(nil)
if req.Region != "" {
client := core.ExtractClient(ctx)
api := mnq.NewSqsAPI(client)
if completeSqsInfoCache == nil {
res, err := api.GetSqsInfo(&mnq.SqsAPIGetSqsInfoRequest{
Region: req.Region,
})
if err != nil {
return nil
}
completeSqsInfoCache = res
}
if completeSqsListCredentials != nil {
res, err := api.ListSqsCredentials(&mnq.SqsAPIListSqsCredentialsRequest{
Region: req.Region,
ProjectID: &completeSqsInfoCache.ProjectID,
})
if err != nil {
return nil
}
completeSqsListCredentials = res
}
for _, sqsCredentials := range completeSqsListCredentials.SqsCredentials {
if strings.HasPrefix(sqsCredentials.ID, prefix) {
suggestions = append(suggestions, sqsCredentials.ID)
}
}
}
return suggestions
}