Skip to content

Commit 5ab0c24

Browse files
committed
Move client capabilities defaulting behavior to fromproto5/6 package
1 parent f5d659d commit 5ab0c24

18 files changed

+157
-202
lines changed

internal/fromproto5/client_capabilities.go

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,50 +10,54 @@ import (
1010
"github.com/hashicorp/terraform-plugin-framework/resource"
1111
)
1212

13-
func ReadDataSourceClientCapabilities(in *tfprotov5.ReadDataSourceClientCapabilities) *datasource.ReadClientCapabilities {
13+
func ReadDataSourceClientCapabilities(in *tfprotov5.ReadDataSourceClientCapabilities) datasource.ReadClientCapabilities {
1414
if in == nil {
15-
return nil
15+
// Client did not indicate any supported capabilities
16+
return datasource.ReadClientCapabilities{
17+
DeferralAllowed: false,
18+
}
1619
}
1720

18-
resp := &datasource.ReadClientCapabilities{
21+
return datasource.ReadClientCapabilities{
1922
DeferralAllowed: in.DeferralAllowed,
2023
}
21-
22-
return resp
2324
}
2425

25-
func ReadResourceClientCapabilities(in *tfprotov5.ReadResourceClientCapabilities) *resource.ReadClientCapabilities {
26+
func ReadResourceClientCapabilities(in *tfprotov5.ReadResourceClientCapabilities) resource.ReadClientCapabilities {
2627
if in == nil {
27-
return nil
28+
// Client did not indicate any supported capabilities
29+
return resource.ReadClientCapabilities{
30+
DeferralAllowed: false,
31+
}
2832
}
2933

30-
resp := &resource.ReadClientCapabilities{
34+
return resource.ReadClientCapabilities{
3135
DeferralAllowed: in.DeferralAllowed,
3236
}
33-
34-
return resp
3537
}
3638

37-
func ModifyPlanClientCapabilities(in *tfprotov5.PlanResourceChangeClientCapabilities) *resource.ModifyPlanClientCapabilities {
39+
func ModifyPlanClientCapabilities(in *tfprotov5.PlanResourceChangeClientCapabilities) resource.ModifyPlanClientCapabilities {
3840
if in == nil {
39-
return nil
41+
// Client did not indicate any supported capabilities
42+
return resource.ModifyPlanClientCapabilities{
43+
DeferralAllowed: false,
44+
}
4045
}
4146

42-
resp := &resource.ModifyPlanClientCapabilities{
47+
return resource.ModifyPlanClientCapabilities{
4348
DeferralAllowed: in.DeferralAllowed,
4449
}
45-
46-
return resp
4750
}
4851

49-
func ImportStateClientCapabilities(in *tfprotov5.ImportResourceStateClientCapabilities) *resource.ImportStateClientCapabilities {
52+
func ImportStateClientCapabilities(in *tfprotov5.ImportResourceStateClientCapabilities) resource.ImportStateClientCapabilities {
5053
if in == nil {
51-
return nil
54+
// Client did not indicate any supported capabilities
55+
return resource.ImportStateClientCapabilities{
56+
DeferralAllowed: false,
57+
}
5258
}
5359

54-
resp := &resource.ImportStateClientCapabilities{
60+
return resource.ImportStateClientCapabilities{
5561
DeferralAllowed: in.DeferralAllowed,
5662
}
57-
58-
return resp
5963
}

internal/fromproto5/importresourcestate_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,24 @@ func TestImportResourceStateRequest(t *testing.T) {
9898
expected: &fwserver.ImportResourceStateRequest{
9999
EmptyState: testFwEmptyState,
100100
ID: "test-id",
101-
ClientCapabilities: &resource.ImportStateClientCapabilities{
101+
ClientCapabilities: resource.ImportStateClientCapabilities{
102102
DeferralAllowed: true,
103103
},
104104
},
105105
},
106+
"client-capabilities-unset": {
107+
input: &tfprotov5.ImportResourceStateRequest{
108+
ID: "test-id",
109+
},
110+
resourceSchema: testFwSchema,
111+
expected: &fwserver.ImportResourceStateRequest{
112+
EmptyState: testFwEmptyState,
113+
ID: "test-id",
114+
ClientCapabilities: resource.ImportStateClientCapabilities{
115+
DeferralAllowed: false,
116+
},
117+
},
118+
},
106119
}
107120

108121
for name, testCase := range testCases {

internal/fromproto5/planresourcechange_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,22 @@ func TestPlanResourceChangeRequest(t *testing.T) {
225225
},
226226
resourceSchema: testFwSchema,
227227
expected: &fwserver.PlanResourceChangeRequest{
228-
ClientCapabilities: &resource.ModifyPlanClientCapabilities{
228+
ClientCapabilities: resource.ModifyPlanClientCapabilities{
229229
DeferralAllowed: true,
230230
},
231231
ResourceSchema: testFwSchema,
232232
},
233233
},
234+
"client-capabilities-unset": {
235+
input: &tfprotov5.PlanResourceChangeRequest{},
236+
resourceSchema: testFwSchema,
237+
expected: &fwserver.PlanResourceChangeRequest{
238+
ClientCapabilities: resource.ModifyPlanClientCapabilities{
239+
DeferralAllowed: false,
240+
},
241+
ResourceSchema: testFwSchema,
242+
},
243+
},
234244
}
235245

236246
for name, testCase := range testCases {

internal/fromproto5/readdatasource_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,11 +145,21 @@ func TestReadDataSourceRequest(t *testing.T) {
145145
dataSourceSchema: testFwSchema,
146146
expected: &fwserver.ReadDataSourceRequest{
147147
DataSourceSchema: testFwSchema,
148-
ClientCapabilities: &datasource.ReadClientCapabilities{
148+
ClientCapabilities: datasource.ReadClientCapabilities{
149149
DeferralAllowed: true,
150150
},
151151
},
152152
},
153+
"client-capabilities-unset": {
154+
input: &tfprotov5.ReadDataSourceRequest{},
155+
dataSourceSchema: testFwSchema,
156+
expected: &fwserver.ReadDataSourceRequest{
157+
DataSourceSchema: testFwSchema,
158+
ClientCapabilities: datasource.ReadClientCapabilities{
159+
DeferralAllowed: false,
160+
},
161+
},
162+
},
153163
}
154164

155165
for name, testCase := range testCases {

internal/fromproto5/readresource_test.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,20 @@ func TestReadResourceRequest(t *testing.T) {
180180
},
181181
resourceSchema: testFwSchema,
182182
expected: &fwserver.ReadResourceRequest{
183-
ClientCapabilities: &resource.ReadClientCapabilities{
183+
ClientCapabilities: resource.ReadClientCapabilities{
184184
DeferralAllowed: true,
185185
},
186186
},
187187
},
188+
"client-capabilities-unset": {
189+
input: &tfprotov5.ReadResourceRequest{},
190+
resourceSchema: testFwSchema,
191+
expected: &fwserver.ReadResourceRequest{
192+
ClientCapabilities: resource.ReadClientCapabilities{
193+
DeferralAllowed: false,
194+
},
195+
},
196+
},
188197
}
189198

190199
for name, testCase := range testCases {

internal/fromproto6/client_capabilities.go

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,50 +10,54 @@ import (
1010
"github.com/hashicorp/terraform-plugin-framework/resource"
1111
)
1212

13-
func ReadDataSourceClientCapabilities(in *tfprotov6.ReadDataSourceClientCapabilities) *datasource.ReadClientCapabilities {
13+
func ReadDataSourceClientCapabilities(in *tfprotov6.ReadDataSourceClientCapabilities) datasource.ReadClientCapabilities {
1414
if in == nil {
15-
return nil
15+
// Client did not indicate any supported capabilities
16+
return datasource.ReadClientCapabilities{
17+
DeferralAllowed: false,
18+
}
1619
}
1720

18-
resp := &datasource.ReadClientCapabilities{
21+
return datasource.ReadClientCapabilities{
1922
DeferralAllowed: in.DeferralAllowed,
2023
}
21-
22-
return resp
2324
}
2425

25-
func ReadResourceClientCapabilities(in *tfprotov6.ReadResourceClientCapabilities) *resource.ReadClientCapabilities {
26+
func ReadResourceClientCapabilities(in *tfprotov6.ReadResourceClientCapabilities) resource.ReadClientCapabilities {
2627
if in == nil {
27-
return nil
28+
// Client did not indicate any supported capabilities
29+
return resource.ReadClientCapabilities{
30+
DeferralAllowed: false,
31+
}
2832
}
2933

30-
resp := &resource.ReadClientCapabilities{
34+
return resource.ReadClientCapabilities{
3135
DeferralAllowed: in.DeferralAllowed,
3236
}
33-
34-
return resp
3537
}
3638

37-
func ModifyPlanClientCapabilities(in *tfprotov6.PlanResourceChangeClientCapabilities) *resource.ModifyPlanClientCapabilities {
39+
func ModifyPlanClientCapabilities(in *tfprotov6.PlanResourceChangeClientCapabilities) resource.ModifyPlanClientCapabilities {
3840
if in == nil {
39-
return nil
41+
// Client did not indicate any supported capabilities
42+
return resource.ModifyPlanClientCapabilities{
43+
DeferralAllowed: false,
44+
}
4045
}
4146

42-
resp := &resource.ModifyPlanClientCapabilities{
47+
return resource.ModifyPlanClientCapabilities{
4348
DeferralAllowed: in.DeferralAllowed,
4449
}
45-
46-
return resp
4750
}
4851

49-
func ImportStateClientCapabilities(in *tfprotov6.ImportResourceStateClientCapabilities) *resource.ImportStateClientCapabilities {
52+
func ImportStateClientCapabilities(in *tfprotov6.ImportResourceStateClientCapabilities) resource.ImportStateClientCapabilities {
5053
if in == nil {
51-
return nil
54+
// Client did not indicate any supported capabilities
55+
return resource.ImportStateClientCapabilities{
56+
DeferralAllowed: false,
57+
}
5258
}
5359

54-
resp := &resource.ImportStateClientCapabilities{
60+
return resource.ImportStateClientCapabilities{
5561
DeferralAllowed: in.DeferralAllowed,
5662
}
57-
58-
return resp
5963
}

internal/fromproto6/importresourcestate_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,24 @@ func TestImportResourceStateRequest(t *testing.T) {
9898
expected: &fwserver.ImportResourceStateRequest{
9999
EmptyState: testFwEmptyState,
100100
ID: "test-id",
101-
ClientCapabilities: &resource.ImportStateClientCapabilities{
101+
ClientCapabilities: resource.ImportStateClientCapabilities{
102102
DeferralAllowed: true,
103103
},
104104
},
105105
},
106+
"client-capabilities-unset": {
107+
input: &tfprotov6.ImportResourceStateRequest{
108+
ID: "test-id",
109+
},
110+
resourceSchema: testFwSchema,
111+
expected: &fwserver.ImportResourceStateRequest{
112+
EmptyState: testFwEmptyState,
113+
ID: "test-id",
114+
ClientCapabilities: resource.ImportStateClientCapabilities{
115+
DeferralAllowed: false,
116+
},
117+
},
118+
},
106119
}
107120

108121
for name, testCase := range testCases {

internal/fromproto6/planresourcechange_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,22 @@ func TestPlanResourceChangeRequest(t *testing.T) {
225225
},
226226
resourceSchema: testFwSchema,
227227
expected: &fwserver.PlanResourceChangeRequest{
228-
ClientCapabilities: &resource.ModifyPlanClientCapabilities{
228+
ClientCapabilities: resource.ModifyPlanClientCapabilities{
229229
DeferralAllowed: true,
230230
},
231231
ResourceSchema: testFwSchema,
232232
},
233233
},
234+
"client-capabilities-unset": {
235+
input: &tfprotov6.PlanResourceChangeRequest{},
236+
resourceSchema: testFwSchema,
237+
expected: &fwserver.PlanResourceChangeRequest{
238+
ClientCapabilities: resource.ModifyPlanClientCapabilities{
239+
DeferralAllowed: false,
240+
},
241+
ResourceSchema: testFwSchema,
242+
},
243+
},
234244
}
235245

236246
for name, testCase := range testCases {

internal/fromproto6/readdatasource_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,11 +145,21 @@ func TestReadDataSourceRequest(t *testing.T) {
145145
dataSourceSchema: testFwSchema,
146146
expected: &fwserver.ReadDataSourceRequest{
147147
DataSourceSchema: testFwSchema,
148-
ClientCapabilities: &datasource.ReadClientCapabilities{
148+
ClientCapabilities: datasource.ReadClientCapabilities{
149149
DeferralAllowed: true,
150150
},
151151
},
152152
},
153+
"client-capabilities-unset": {
154+
input: &tfprotov6.ReadDataSourceRequest{},
155+
dataSourceSchema: testFwSchema,
156+
expected: &fwserver.ReadDataSourceRequest{
157+
DataSourceSchema: testFwSchema,
158+
ClientCapabilities: datasource.ReadClientCapabilities{
159+
DeferralAllowed: false,
160+
},
161+
},
162+
},
153163
}
154164

155165
for name, testCase := range testCases {

internal/fromproto6/readresource_test.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,20 @@ func TestReadResourceRequest(t *testing.T) {
180180
},
181181
resourceSchema: testFwSchema,
182182
expected: &fwserver.ReadResourceRequest{
183-
ClientCapabilities: &resource.ReadClientCapabilities{
183+
ClientCapabilities: resource.ReadClientCapabilities{
184184
DeferralAllowed: true,
185185
},
186186
},
187187
},
188+
"client-capabilities-unset": {
189+
input: &tfprotov6.ReadResourceRequest{},
190+
resourceSchema: testFwSchema,
191+
expected: &fwserver.ReadResourceRequest{
192+
ClientCapabilities: resource.ReadClientCapabilities{
193+
DeferralAllowed: false,
194+
},
195+
},
196+
},
188197
}
189198

190199
for name, testCase := range testCases {

internal/fwserver/server_importresourcestate.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ type ImportResourceStateRequest struct {
3636
// the ImportedResource TypeName of the ImportResourceStateResponse.
3737
TypeName string
3838

39-
ClientCapabilities *resource.ImportStateClientCapabilities
39+
ClientCapabilities resource.ImportStateClientCapabilities
4040
}
4141

4242
// ImportResourceStateResponse is the framework server response for the
@@ -93,11 +93,8 @@ func (s *Server) ImportResourceState(ctx context.Context, req *ImportResourceSta
9393
}
9494

9595
importReq := resource.ImportStateRequest{
96-
ID: req.ID,
97-
}
98-
99-
if req.ClientCapabilities != nil {
100-
importReq.ClientCapabilities = *req.ClientCapabilities
96+
ID: req.ID,
97+
ClientCapabilities: req.ClientCapabilities,
10198
}
10299

103100
privateProviderData := privatestate.EmptyProviderData(ctx)

0 commit comments

Comments
 (0)