Skip to content

Commit b3b0802

Browse files
authored
chore: migrate types to its own package (#2453)
* chore: migrate types to its own package * Fix
1 parent 5b864a6 commit b3b0802

File tree

170 files changed

+1334
-1141
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

170 files changed

+1334
-1141
lines changed

cmd/tftemplate/datasource.go.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ func dataSourceScaleway{{.Resource}}Read(ctx context.Context, d *schema.Resource
3939
if !{{.ResourceCleanLow}}IDExists {
4040
res, err := api.List{{.ResourceClean}}s(&{{.API}}.List{{.ResourceClean}}sRequest{
4141
{{.LocalityUpper}}: {{.Locality}},
42-
Name: expandStringPtr(d.Get("name")),
43-
ProjectID: expandStringPtr(d.Get("project_id")),
42+
Name: types.ExpandStringPtr(d.Get("name")),
43+
ProjectID: types.ExpandStringPtr(d.Get("project_id")),
4444
})
4545
if err != nil {
4646
return diag.FromErr(err)

cmd/tftemplate/resource.go.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func resourceScaleway{{ .Resource }}Create(ctx context.Context, d *schema.Resour
4242
{{ .ResourceCleanLow }}, err := api.Create{{ .ResourceClean }}(&{{ .API }}.Create{{ .ResourceClean }}Request{
4343
{{.LocalityUpper}}: {{.Locality}},
4444
ProjectID: d.Get("project_id").(string),
45-
Name: expandOrGenerateString(d.Get("name").(string), "{{ .ResourceCleanLow }}"),
45+
Name: types.ExpandOrGenerateString(d.Get("name").(string), "{{ .ResourceCleanLow }}"),
4646
}, scw.WithContext(ctx))
4747
if err != nil {
4848
return diag.FromErr(err)
@@ -109,7 +109,7 @@ func resourceScaleway{{ .Resource }}Update(ctx context.Context, d *schema.Resour
109109
}
110110

111111
if d.HasChange("name") {
112-
req.Name = expandUpdatedStringPtr(d.Get("name"))
112+
req.Name = types.ExpandUpdatedStringPtr(d.Get("name"))
113113
}
114114

115115
if _, err := api.Update{{ .ResourceClean }}(req, scw.WithContext(ctx)); err != nil {

internal/types/bool.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package types
2+
3+
import "github.com/scaleway/scaleway-sdk-go/scw"
4+
5+
func FlattenBoolPtr(b *bool) interface{} {
6+
if b == nil {
7+
return nil
8+
}
9+
return *b
10+
}
11+
12+
func ExpandBoolPtr(data interface{}) *bool {
13+
if data == nil {
14+
return nil
15+
}
16+
return scw.BoolPtr(data.(bool))
17+
}

internal/types/ip.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package types
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"net"
7+
"strconv"
8+
9+
"github.com/scaleway/scaleway-sdk-go/scw"
10+
)
11+
12+
func ExpandIPNet(raw string) (scw.IPNet, error) {
13+
if raw == "" {
14+
return scw.IPNet{}, nil
15+
}
16+
var ipNet scw.IPNet
17+
err := json.Unmarshal([]byte(strconv.Quote(raw)), &ipNet)
18+
if err != nil {
19+
return scw.IPNet{}, fmt.Errorf("%s could not be marshaled: %v", raw, err)
20+
}
21+
22+
return ipNet, nil
23+
}
24+
25+
func FlattenIPPtr(ip *net.IP) interface{} {
26+
if ip == nil {
27+
return ""
28+
}
29+
return ip.String()
30+
}
31+
32+
func FlattenIPNet(ipNet scw.IPNet) (string, error) {
33+
raw, err := json.Marshal(ipNet)
34+
if err != nil {
35+
return "", err
36+
}
37+
return string(raw[1 : len(raw)-1]), nil // remove quotes
38+
}

internal/types/map.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package types
2+
3+
func FlattenMap(m map[string]string) interface{} {
4+
if m == nil {
5+
return nil
6+
}
7+
flattenedMap := make(map[string]interface{})
8+
for k, v := range m {
9+
flattenedMap[k] = v
10+
}
11+
return flattenedMap
12+
}
13+
14+
func FlattenMapStringStringPtr(m map[string]*string) interface{} {
15+
if m == nil {
16+
return nil
17+
}
18+
flattenedMap := make(map[string]interface{})
19+
for k, v := range m {
20+
if v != nil {
21+
flattenedMap[k] = *v
22+
} else {
23+
flattenedMap[k] = ""
24+
}
25+
}
26+
return flattenedMap
27+
}
28+
29+
func ExpandMapPtrStringString(data interface{}) *map[string]string {
30+
if data == nil {
31+
return nil
32+
}
33+
m := make(map[string]string)
34+
for k, v := range data.(map[string]interface{}) {
35+
m[k] = v.(string)
36+
}
37+
return &m
38+
}
39+
40+
func ExpandMapStringStringPtr(data interface{}) map[string]*string {
41+
if data == nil {
42+
return nil
43+
}
44+
m := make(map[string]*string)
45+
for k, v := range data.(map[string]interface{}) {
46+
m[k] = ExpandStringPtr(v)
47+
}
48+
return m
49+
}
50+
51+
func ExpandMapStringString(data any) map[string]string {
52+
if data == nil {
53+
return nil
54+
}
55+
m := make(map[string]string)
56+
for k, v := range data.(map[string]interface{}) {
57+
m[k] = v.(string)
58+
}
59+
return m
60+
}

internal/types/number.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package types
2+
3+
import "github.com/scaleway/scaleway-sdk-go/scw"
4+
5+
func FlattenInt32Ptr(i *int32) interface{} {
6+
if i == nil {
7+
return 0
8+
}
9+
return *i
10+
}
11+
12+
func FlattenUint32Ptr(i *uint32) interface{} {
13+
if i == nil {
14+
return 0
15+
}
16+
return *i
17+
}
18+
19+
func ExpandInt32Ptr(data interface{}) *int32 {
20+
if data == nil || data == "" {
21+
return nil
22+
}
23+
return scw.Int32Ptr(int32(data.(int)))
24+
}
25+
26+
func ExpandUint32Ptr(data interface{}) *uint32 {
27+
if data == nil || data == "" {
28+
return nil
29+
}
30+
return scw.Uint32Ptr(uint32(data.(int)))
31+
}

internal/types/scw.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package types
2+
3+
import "github.com/scaleway/scaleway-sdk-go/scw"
4+
5+
func FlattenSize(size *scw.Size) interface{} {
6+
if size == nil {
7+
return 0
8+
}
9+
return *size
10+
}

internal/types/string.go

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
package types
2+
3+
import (
4+
"github.com/scaleway/scaleway-sdk-go/namegenerator"
5+
"github.com/scaleway/scaleway-sdk-go/scw"
6+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality"
7+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/locality/zonal"
8+
)
9+
10+
func FlattenStringPtr(s *string) interface{} {
11+
if s == nil {
12+
return ""
13+
}
14+
return *s
15+
}
16+
17+
func ExpandStringPtr(data interface{}) *string {
18+
if data == nil || data == "" {
19+
return nil
20+
}
21+
return scw.StringPtr(data.(string))
22+
}
23+
24+
// NewRandomName returns a random name prefixed for terraform.
25+
func NewRandomName(prefix string) string {
26+
return namegenerator.GetRandomName("tf", prefix)
27+
}
28+
29+
func ExpandOrGenerateString(data interface{}, prefix string) string {
30+
if data == nil || data == "" {
31+
return NewRandomName(prefix)
32+
}
33+
return data.(string)
34+
}
35+
36+
func ExpandStringWithDefault(data interface{}, defaultValue string) string {
37+
if data == nil || data.(string) == "" {
38+
return defaultValue
39+
}
40+
return data.(string)
41+
}
42+
43+
func ExpandSliceStringPtr(data interface{}) []*string {
44+
if data == nil {
45+
return nil
46+
}
47+
stringSlice := []*string(nil)
48+
for _, s := range data.([]interface{}) {
49+
stringSlice = append(stringSlice, ExpandStringPtr(s))
50+
}
51+
return stringSlice
52+
}
53+
54+
func FlattenSliceStringPtr(s []*string) interface{} {
55+
res := make([]interface{}, 0, len(s))
56+
for _, strPtr := range s {
57+
res = append(res, FlattenStringPtr(strPtr))
58+
}
59+
return res
60+
}
61+
62+
func FlattenSliceString(s []string) interface{} {
63+
res := make([]interface{}, 0, len(s))
64+
for _, strPtr := range s {
65+
res = append(res, strPtr)
66+
}
67+
return res
68+
}
69+
70+
func ExpandUpdatedStringPtr(data interface{}) *string {
71+
str := ""
72+
if data != nil {
73+
str = data.(string)
74+
}
75+
return &str
76+
}
77+
78+
func ExpandStrings(data interface{}) []string {
79+
stringSlice := make([]string, 0, len(data.([]interface{})))
80+
for _, s := range data.([]interface{}) {
81+
// zero-value is nil, ["foo", ""]
82+
if s == nil {
83+
s = ""
84+
}
85+
stringSlice = append(stringSlice, s.(string))
86+
}
87+
return stringSlice
88+
}
89+
90+
func ExpandStringsPtr(data interface{}) *[]string {
91+
stringSlice := make([]string, 0, len(data.([]interface{})))
92+
if _, ok := data.([]interface{}); !ok || data == nil {
93+
return nil
94+
}
95+
for _, s := range data.([]interface{}) {
96+
// zero-value is nil, ["foo", ""]
97+
if s == nil {
98+
s = ""
99+
}
100+
stringSlice = append(stringSlice, s.(string))
101+
}
102+
if len(stringSlice) == 0 {
103+
return nil
104+
}
105+
106+
return &stringSlice
107+
}
108+
109+
// ExpandUpdatedStringsPtr expands a string slice but will default to an empty list.
110+
// Should be used on schema update so emptying a list will update resource.
111+
func ExpandUpdatedStringsPtr(data interface{}) *[]string {
112+
stringSlice := []string{}
113+
if _, ok := data.([]interface{}); !ok || data == nil {
114+
return &stringSlice
115+
}
116+
for _, s := range data.([]interface{}) {
117+
// zero-value is nil, ["foo", ""]
118+
if s == nil {
119+
s = ""
120+
}
121+
stringSlice = append(stringSlice, s.(string))
122+
}
123+
return &stringSlice
124+
}
125+
126+
func ExpandSliceIDsPtr(rawIDs interface{}) *[]string {
127+
stringSlice := make([]string, 0, len(rawIDs.([]interface{})))
128+
if _, ok := rawIDs.([]interface{}); !ok || rawIDs == nil {
129+
return &stringSlice
130+
}
131+
for _, s := range rawIDs.([]interface{}) {
132+
stringSlice = append(stringSlice, locality.ExpandID(s.(string)))
133+
}
134+
return &stringSlice
135+
}
136+
137+
func ExpandStringsOrEmpty(data interface{}) []string {
138+
stringSlice := make([]string, 0, len(data.([]interface{})))
139+
if _, ok := data.([]interface{}); !ok || data == nil {
140+
return stringSlice
141+
}
142+
for _, s := range data.([]interface{}) {
143+
stringSlice = append(stringSlice, s.(string))
144+
}
145+
return stringSlice
146+
}
147+
148+
func FlattenSliceIDs(certificates []string, zone scw.Zone) interface{} {
149+
res := []interface{}(nil)
150+
for _, certificateID := range certificates {
151+
res = append(res, zonal.NewIDString(zone, certificateID))
152+
}
153+
154+
return res
155+
}

internal/types/string_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package types_test
2+
3+
import (
4+
"strings"
5+
"testing"
6+
7+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/types"
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestGetRandomName(t *testing.T) {
12+
name := types.NewRandomName("test")
13+
assert.True(t, strings.HasPrefix(name, "tf-test-"))
14+
}

internal/types/time.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package types
2+
3+
import "time"
4+
5+
func FlattenDuration(duration *time.Duration) interface{} {
6+
if duration != nil {
7+
return duration.String()
8+
}
9+
return ""
10+
}
11+
12+
func ExpandDuration(data interface{}) (*time.Duration, error) {
13+
if data == nil || data == "" {
14+
return nil, nil
15+
}
16+
d, err := time.ParseDuration(data.(string))
17+
if err != nil {
18+
return nil, err
19+
}
20+
return &d, nil
21+
}
22+
23+
func FlattenTime(date *time.Time) interface{} {
24+
if date != nil {
25+
return date.Format(time.RFC3339)
26+
}
27+
return ""
28+
}

0 commit comments

Comments
 (0)