Skip to content

Commit 833fb65

Browse files
authored
feat(mnq) : add autocompletion for credentials and account (#3700)
1 parent 45e774f commit 833fb65

File tree

4 files changed

+214
-0
lines changed

4 files changed

+214
-0
lines changed

internal/namespaces/mnq/v1beta1/custom.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,16 @@ func GetCommands() *core.Commands {
1111

1212
human.RegisterMarshalerFunc(mnq.SnsInfoStatus(""), human.EnumMarshalFunc(mnqSqsInfoStatusMarshalSpecs))
1313

14+
cmds.MustFind("mnq", "nats", "get-account").Override(mnqNatsGetAccountBuilder)
15+
cmds.MustFind("mnq", "nats", "list-credentials").Override(mnqNatsListCredentialsBuilder)
16+
17+
cmds.MustFind("mnq", "sqs", "list-credentials").Override(mnqSqsListCredentialsBuilder)
18+
cmds.MustFind("mnq", "sqs", "get-credentials").Override(mnqSqsGetCredentialsBuilder)
19+
20+
cmds.MustFind("mnq", "sns", "list-credentials").Override(mnqSnsListCredentialsBuilder)
21+
22+
cmds.MustFind("mnq", "sns", "get-credentials").Override(mnqSnsGetCredentialsBuilder)
23+
1424
cmds.Merge(core.NewCommands(
1525
createContextCommand(),
1626
))

internal/namespaces/mnq/v1beta1/custom_nats.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"reflect"
7+
"strings"
78

89
"github.com/scaleway/scaleway-cli/v2/internal/core"
910
mnq "github.com/scaleway/scaleway-sdk-go/api/mnq/v1beta1"
@@ -91,3 +92,47 @@ Credentials and context file are saved in your nats context folder with 0600 per
9192
},
9293
}
9394
}
95+
96+
func mnqNatsGetAccountBuilder(c *core.Command) *core.Command {
97+
c.ArgSpecs.GetByName("nats-account-id").AutoCompleteFunc = autocompleteNatsAccountID
98+
return c
99+
}
100+
101+
func mnqNatsListCredentialsBuilder(c *core.Command) *core.Command {
102+
c.ArgSpecs.GetByName("nats-account-id").AutoCompleteFunc = autocompleteNatsAccountID
103+
return c
104+
}
105+
106+
var completeListNatsAccountIDCache *mnq.ListNatsAccountsResponse
107+
108+
func autocompleteNatsAccountID(ctx context.Context, prefix string, request any) core.AutocompleteSuggestions {
109+
region := scw.Region("")
110+
switch req := request.(type) {
111+
case *mnq.NatsAPIGetNatsAccountRequest:
112+
region = req.Region
113+
case *mnq.NatsAPIListNatsCredentialsRequest:
114+
region = req.Region
115+
}
116+
117+
suggestions := core.AutocompleteSuggestions(nil)
118+
119+
client := core.ExtractClient(ctx)
120+
api := mnq.NewNatsAPI(client)
121+
122+
if completeListNatsAccountIDCache == nil {
123+
res, err := api.ListNatsAccounts(&mnq.NatsAPIListNatsAccountsRequest{
124+
Region: region,
125+
})
126+
if err != nil {
127+
return nil
128+
}
129+
completeListNatsAccountIDCache = res
130+
}
131+
132+
for _, natsAccountID := range completeListNatsAccountIDCache.NatsAccounts {
133+
if strings.HasPrefix(natsAccountID.ID, prefix) {
134+
suggestions = append(suggestions, natsAccountID.ID)
135+
}
136+
}
137+
return suggestions
138+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package mnq
2+
3+
import (
4+
"context"
5+
"strings"
6+
7+
"github.com/scaleway/scaleway-cli/v2/internal/core"
8+
mnq "github.com/scaleway/scaleway-sdk-go/api/mnq/v1beta1"
9+
)
10+
11+
func mnqSnsListCredentialsBuilder(c *core.Command) *core.Command {
12+
c.ArgSpecs.GetByName("project-id").AutoCompleteFunc = autocompleteSnsProjectID
13+
return c
14+
}
15+
16+
func mnqSnsGetCredentialsBuilder(c *core.Command) *core.Command {
17+
c.ArgSpecs.GetByName("sns-credentials-id").AutoCompleteFunc = autocompleteSnsCredentialsID
18+
return c
19+
}
20+
21+
var completeSnsInfoCache *mnq.SnsInfo
22+
23+
func autocompleteSnsProjectID(ctx context.Context, prefix string, request any) core.AutocompleteSuggestions {
24+
_ = prefix
25+
req := request.(*mnq.SnsAPIListSnsCredentialsRequest)
26+
suggestions := core.AutocompleteSuggestions(nil)
27+
28+
client := core.ExtractClient(ctx)
29+
api := mnq.NewSnsAPI(client)
30+
31+
if completeSnsInfoCache == nil {
32+
res, err := api.GetSnsInfo(&mnq.SnsAPIGetSnsInfoRequest{
33+
Region: req.Region,
34+
})
35+
if err != nil {
36+
return nil
37+
}
38+
completeSnsInfoCache = res
39+
}
40+
41+
suggestions = append(suggestions, completeSnsInfoCache.ProjectID)
42+
return suggestions
43+
}
44+
45+
var completeSnsListCredentials *mnq.ListSnsCredentialsResponse
46+
47+
func autocompleteSnsCredentialsID(ctx context.Context, prefix string, request any) core.AutocompleteSuggestions {
48+
req := request.(*mnq.SnsAPIGetSnsCredentialsRequest)
49+
50+
suggestions := core.AutocompleteSuggestions(nil)
51+
52+
if req.Region != "" {
53+
client := core.ExtractClient(ctx)
54+
api := mnq.NewSnsAPI(client)
55+
if completeSnsInfoCache == nil {
56+
res, err := api.GetSnsInfo(&mnq.SnsAPIGetSnsInfoRequest{
57+
Region: req.Region,
58+
})
59+
if err != nil {
60+
return nil
61+
}
62+
completeSnsInfoCache = res
63+
}
64+
if completeSnsListCredentials == nil {
65+
res, err := api.ListSnsCredentials(&mnq.SnsAPIListSnsCredentialsRequest{
66+
Region: req.Region,
67+
ProjectID: &completeSnsInfoCache.ProjectID,
68+
})
69+
70+
if err != nil {
71+
return nil
72+
}
73+
completeSnsListCredentials = res
74+
}
75+
76+
for _, snsCredentials := range completeSnsListCredentials.SnsCredentials {
77+
if strings.HasPrefix(snsCredentials.ID, prefix) {
78+
suggestions = append(suggestions, snsCredentials.ID)
79+
}
80+
}
81+
}
82+
return suggestions
83+
}

internal/namespaces/mnq/v1beta1/custom_sqs.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package mnq
22

33
import (
4+
"context"
5+
"strings"
6+
47
"github.com/fatih/color"
8+
"github.com/scaleway/scaleway-cli/v2/internal/core"
59
"github.com/scaleway/scaleway-cli/v2/internal/human"
610
mnq "github.com/scaleway/scaleway-sdk-go/api/mnq/v1beta1"
711
)
@@ -13,3 +17,75 @@ var (
1317
mnq.SqsInfoStatusDisabled: &human.EnumMarshalSpec{Attribute: color.FgRed},
1418
}
1519
)
20+
21+
func mnqSqsListCredentialsBuilder(c *core.Command) *core.Command {
22+
c.ArgSpecs.GetByName("project-id").AutoCompleteFunc = autocompleteSqsProjectID
23+
return c
24+
}
25+
26+
func mnqSqsGetCredentialsBuilder(c *core.Command) *core.Command {
27+
c.ArgSpecs.GetByName("sqs-credentials-id").AutoCompleteFunc = autocompleteSqsCredentialsID
28+
return c
29+
}
30+
31+
var completeSqsInfoCache *mnq.SqsInfo
32+
33+
func autocompleteSqsProjectID(ctx context.Context, prefix string, request any) core.AutocompleteSuggestions {
34+
_ = prefix
35+
req := request.(*mnq.SqsAPIListSqsCredentialsRequest)
36+
suggestions := core.AutocompleteSuggestions(nil)
37+
client := core.ExtractClient(ctx)
38+
api := mnq.NewSqsAPI(client)
39+
if completeSqsInfoCache == nil {
40+
res, err := api.GetSqsInfo(&mnq.SqsAPIGetSqsInfoRequest{
41+
Region: req.Region,
42+
})
43+
if err != nil {
44+
return nil
45+
}
46+
completeSqsInfoCache = res
47+
}
48+
49+
suggestions = append(suggestions, completeSqsInfoCache.ProjectID)
50+
return suggestions
51+
}
52+
53+
var completeSqsListCredentials *mnq.ListSqsCredentialsResponse
54+
55+
func autocompleteSqsCredentialsID(ctx context.Context, prefix string, request any) core.AutocompleteSuggestions {
56+
req := request.(*mnq.SqsAPIGetSqsCredentialsRequest)
57+
58+
suggestions := core.AutocompleteSuggestions(nil)
59+
60+
if req.Region != "" {
61+
client := core.ExtractClient(ctx)
62+
api := mnq.NewSqsAPI(client)
63+
if completeSqsInfoCache == nil {
64+
res, err := api.GetSqsInfo(&mnq.SqsAPIGetSqsInfoRequest{
65+
Region: req.Region,
66+
})
67+
if err != nil {
68+
return nil
69+
}
70+
completeSqsInfoCache = res
71+
}
72+
if completeSqsListCredentials != nil {
73+
res, err := api.ListSqsCredentials(&mnq.SqsAPIListSqsCredentialsRequest{
74+
Region: req.Region,
75+
ProjectID: &completeSqsInfoCache.ProjectID,
76+
})
77+
78+
if err != nil {
79+
return nil
80+
}
81+
completeSqsListCredentials = res
82+
}
83+
84+
for _, sqsCredentials := range completeSqsListCredentials.SqsCredentials {
85+
if strings.HasPrefix(sqsCredentials.ID, prefix) {
86+
suggestions = append(suggestions, sqsCredentials.ID)
87+
}
88+
}
89+
}
90+
return suggestions
91+
}

0 commit comments

Comments
 (0)