Skip to content

Commit 53f3ad1

Browse files
committed
ref(provider/util): support storing any json marshallable value in provider private data
1 parent 54d12dd commit 53f3ad1

4 files changed

Lines changed: 47 additions & 24 deletions

File tree

internal/provider/content_type_resource.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func (r *contentTypeResource) Create(ctx context.Context, req resource.CreateReq
117117
return
118118
}
119119

120-
resp.Diagnostics.Append(util.PrivateDataSetInt(ctx, resp.Private, "version", currentVersion)...)
120+
resp.Diagnostics.Append(util.PrivateDataSetValue(ctx, resp.Private, "version", currentVersion)...)
121121
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
122122
}
123123

@@ -168,7 +168,7 @@ func (r *contentTypeResource) Read(ctx context.Context, req resource.ReadRequest
168168
return
169169
}
170170

171-
resp.Diagnostics.Append(util.PrivateDataSetInt(ctx, resp.Private, "version", currentVersion)...)
171+
resp.Diagnostics.Append(util.PrivateDataSetValue(ctx, resp.Private, "version", currentVersion)...)
172172
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
173173
}
174174

@@ -181,7 +181,8 @@ func (r *contentTypeResource) Update(ctx context.Context, req resource.UpdateReq
181181
return
182182
}
183183

184-
currentVersion, currentVersionDiags := util.PrivateDataGetInt(ctx, req.Private, "version")
184+
var currentVersion int
185+
currentVersionDiags := util.PrivateDataGetValue(ctx, req.Private, "version", &currentVersion)
185186
resp.Diagnostics.Append(currentVersionDiags...)
186187

187188
putContentTypeParams := contentfulManagement.PutContentTypeParams{
@@ -247,7 +248,7 @@ func (r *contentTypeResource) Update(ctx context.Context, req resource.UpdateReq
247248
return
248249
}
249250

250-
resp.Diagnostics.Append(util.PrivateDataSetInt(ctx, resp.Private, "version", currentVersion)...)
251+
resp.Diagnostics.Append(util.PrivateDataSetValue(ctx, resp.Private, "version", currentVersion)...)
251252
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
252253
}
253254

internal/provider/editor_interface_resource.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (r *editorInterfaceResource) Create(ctx context.Context, req resource.Creat
9090
return
9191
}
9292

93-
resp.Diagnostics.Append(util.PrivateDataSetInt(ctx, resp.Private, "version", currentVersion)...)
93+
resp.Diagnostics.Append(util.PrivateDataSetValue(ctx, resp.Private, "version", currentVersion)...)
9494
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
9595
}
9696

@@ -141,7 +141,7 @@ func (r *editorInterfaceResource) Read(ctx context.Context, req resource.ReadReq
141141
return
142142
}
143143

144-
resp.Diagnostics.Append(util.PrivateDataSetInt(ctx, resp.Private, "version", currentVersion)...)
144+
resp.Diagnostics.Append(util.PrivateDataSetValue(ctx, resp.Private, "version", currentVersion)...)
145145
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
146146
}
147147

@@ -154,7 +154,8 @@ func (r *editorInterfaceResource) Update(ctx context.Context, req resource.Updat
154154
return
155155
}
156156

157-
currentVersion, currentVersionDiags := util.PrivateDataGetInt(ctx, req.Private, "version")
157+
var currentVersion int
158+
currentVersionDiags := util.PrivateDataGetValue(ctx, req.Private, "version", &currentVersion)
158159
resp.Diagnostics.Append(currentVersionDiags...)
159160

160161
params := contentfulManagement.PutEditorInterfaceParams{
@@ -193,7 +194,7 @@ func (r *editorInterfaceResource) Update(ctx context.Context, req resource.Updat
193194
return
194195
}
195196

196-
resp.Diagnostics.Append(util.PrivateDataSetInt(ctx, resp.Private, "version", currentVersion)...)
197+
resp.Diagnostics.Append(util.PrivateDataSetValue(ctx, resp.Private, "version", currentVersion)...)
197198
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
198199
}
199200

internal/provider/util/provider_private_data.go

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package util
22

33
import (
44
"context"
5+
"encoding/json"
56

6-
"github.com/go-faster/jx"
77
"github.com/hashicorp/terraform-plugin-framework/diag"
88
)
99

@@ -12,30 +12,35 @@ type ProviderPrivateData interface {
1212
SetKey(ctx context.Context, key string, value []byte) diag.Diagnostics
1313
}
1414

15-
func PrivateDataSetInt(ctx context.Context, providerData ProviderPrivateData, key string, value int) diag.Diagnostics {
16-
encoder := jx.Encoder{}
17-
encoder.Int(value)
18-
valueBytes := encoder.Bytes()
15+
func PrivateDataSetValue[T interface{}](ctx context.Context, providerData ProviderPrivateData, key string, value T) diag.Diagnostics {
16+
diags := diag.Diagnostics{}
17+
18+
valueBytes, err := json.Marshal(value)
19+
if err != nil {
20+
diags.AddError("Failed to marshal value", err.Error())
21+
}
22+
23+
if diags.HasError() {
24+
return diags
25+
}
1926

2027
return providerData.SetKey(ctx, key, valueBytes)
2128
}
2229

23-
func PrivateDataGetInt(ctx context.Context, providerData ProviderPrivateData, key string) (int, diag.Diagnostics) {
30+
func PrivateDataGetValue[T interface{}](ctx context.Context, providerData ProviderPrivateData, key string, value *T) diag.Diagnostics {
2431
diags := diag.Diagnostics{}
2532

2633
valueBytes, getDiags := providerData.GetKey(ctx, key)
2734
diags.Append(getDiags...)
2835

2936
if diags.HasError() {
30-
return 0, diags
37+
return diags
3138
}
3239

33-
decoder := jx.DecodeBytes(valueBytes)
34-
35-
value, err := decoder.Int()
40+
err := json.Unmarshal(valueBytes, value)
3641
if err != nil {
37-
diags.AddError("Failed to decode int", err.Error())
42+
diags.AddError("Failed to unmarshal value", err.Error())
3843
}
3944

40-
return value, diags
45+
return diags
4146
}

internal/provider/util/provider_private_data_test.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package util_test
22

33
import (
44
"context"
5+
"math"
56
"testing"
67

78
"github.com/cysp/terraform-provider-contentful/internal/provider/util"
@@ -47,7 +48,8 @@ func TestPrivateDataGetIntNotSet(t *testing.T) {
4748

4849
privateData := newProviderPrivateData()
4950

50-
value, diags := util.PrivateDataGetInt(ctx, privateData, "key")
51+
var value int
52+
diags := util.PrivateDataGetValue(ctx, privateData, "key", &value)
5153

5254
assert.EqualValues(t, 0, value)
5355
assert.NotEmpty(t, diags)
@@ -60,12 +62,13 @@ func TestPrivateDataGetSetInt(t *testing.T) {
6062

6163
privateData := newProviderPrivateData()
6264

63-
diags := util.PrivateDataSetInt(ctx, privateData, "key", 42)
65+
diags := util.PrivateDataSetValue(ctx, privateData, "key", 42)
6466

6567
assert.EqualValues(t, []byte{'4', '2'}, privateData.data["key"])
6668
assert.Empty(t, diags)
6769

68-
value, diags := util.PrivateDataGetInt(ctx, privateData, "key")
70+
var value int
71+
diags = util.PrivateDataGetValue(ctx, privateData, "key", &value)
6972

7073
assert.EqualValues(t, 42, value)
7174
assert.Empty(t, diags)
@@ -79,8 +82,21 @@ func TestPrivateDataGetIntInvalid(t *testing.T) {
7982
privateData := newProviderPrivateData()
8083
privateData.data["key"] = []byte("invalid")
8184

82-
value, diags := util.PrivateDataGetInt(ctx, privateData, "key")
85+
var value int
86+
diags := util.PrivateDataGetValue(ctx, privateData, "key", &value)
8387

8488
assert.EqualValues(t, 0, value)
8589
assert.NotEmpty(t, diags)
8690
}
91+
92+
func TestPrivateDataSetInf(t *testing.T) {
93+
t.Parallel()
94+
95+
ctx := context.Background()
96+
97+
privateData := newProviderPrivateData()
98+
99+
diags := util.PrivateDataSetValue(ctx, privateData, "key", math.Inf(1))
100+
101+
assert.NotEmpty(t, diags)
102+
}

0 commit comments

Comments
 (0)