Skip to content

Commit 8de15df

Browse files
committed
chore: Adds example of wrapping resource classes
1 parent 04cef66 commit 8de15df

File tree

4 files changed

+87
-7
lines changed

4 files changed

+87
-7
lines changed

internal/config/resource_base.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,17 @@ type ProviderMeta struct {
2525
ScriptLocation types.String `tfsdk:"script_location"`
2626
}
2727

28+
func AnalyticsResource(name string, resource resource.ResourceWithImportState) resource.Resource {
29+
return &RSCommon{
30+
ResourceName: name,
31+
Resource: resource,
32+
}
33+
}
34+
2835
type RSCommon struct {
2936
Client *MongoDBClient
3037
ResourceName string
38+
Resource resource.ResourceWithImportState
3139
}
3240

3341
func (r *RSCommon) ReadProviderMetaCreate(ctx context.Context, req *resource.CreateRequest, diags *diag.Diagnostics) ProviderMeta {
@@ -64,6 +72,34 @@ func (r *RSCommon) Metadata(ctx context.Context, req resource.MetadataRequest, r
6472
resp.TypeName = fmt.Sprintf("%s_%s", req.ProviderTypeName, r.ResourceName)
6573
}
6674

75+
func (r *RSCommon) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) {
76+
r.Resource.Schema(ctx, req, resp)
77+
}
78+
79+
func (r *RSCommon) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
80+
meta := r.ReadProviderMetaCreate(ctx, &req, &resp.Diagnostics)
81+
ctx = AddUserAgentExtra(ctx, UserAgentExtra{
82+
ModuleName: meta.ModuleName.ValueString(),
83+
ModuleVersion: meta.ModuleVersion.ValueString(),
84+
Name: r.ResourceName,
85+
Operation: "create",
86+
})
87+
r.Resource.Create(ctx, req, resp) // Call original create
88+
}
89+
90+
func (r *RSCommon) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
91+
r.Resource.Read(ctx, req, resp)
92+
}
93+
func (r *RSCommon) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
94+
r.Resource.Update(ctx, req, resp)
95+
}
96+
func (r *RSCommon) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) {
97+
r.Resource.ImportState(ctx, req, resp)
98+
}
99+
func (r *RSCommon) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
100+
r.Resource.Delete(ctx, req, resp)
101+
}
102+
67103
func (r *RSCommon) Configure(ctx context.Context, req resource.ConfigureRequest, resp *resource.ConfigureResponse) {
68104
client, err := configureClient(req.ProviderData)
69105
if err != nil {
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package config
2+
3+
import (
4+
"context"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
)
9+
10+
func NewAnalyticsResource(d *schema.Resource) *schema.Resource {
11+
analyticsResource := AnalyticsResourceSDKv2{
12+
resource: d,
13+
}
14+
return &schema.Resource{
15+
// Original field mapping
16+
Schema: d.Schema,
17+
SchemaFunc: d.SchemaFunc,
18+
// Overriding the CRUDI methods
19+
CreateContext: analyticsResource.CreateContext,
20+
ReadContext: analyticsResource.ReadContext,
21+
UpdateContext: analyticsResource.UpdateContext,
22+
DeleteContext: analyticsResource.DeleteContext,
23+
}
24+
}
25+
26+
type AnalyticsResourceSDKv2 struct {
27+
resource *schema.Resource
28+
}
29+
30+
func (a *AnalyticsResourceSDKv2) CreateContext(ctx context.Context, r *schema.ResourceData, m interface{}) diag.Diagnostics {
31+
// TODO: Add analytics
32+
return a.resource.CreateContext(ctx, r, m)
33+
}
34+
35+
// See Resource documentation.
36+
func (a *AnalyticsResourceSDKv2) ReadContext(ctx context.Context, r *schema.ResourceData, m interface{}) diag.Diagnostics {
37+
return a.resource.ReadContext(ctx, r, m)
38+
}
39+
40+
// See Resource documentation.
41+
func (a *AnalyticsResourceSDKv2) UpdateContext(ctx context.Context, r *schema.ResourceData, m interface{}) diag.Diagnostics {
42+
return a.resource.UpdateContext(ctx, r, m)
43+
}
44+
45+
// See Resource documentation.
46+
func (a *AnalyticsResourceSDKv2) DeleteContext(ctx context.Context, r *schema.ResourceData, m interface{}) diag.Diagnostics {
47+
return a.resource.DeleteContext(ctx, r, m)
48+
}

internal/service/federateddatabaseinstance/resource_federated_database_instance.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const (
2424
)
2525

2626
func Resource() *schema.Resource {
27-
return &schema.Resource{
27+
return config.NewAnalyticsResource(&schema.Resource{
2828
CreateContext: resourceCreate,
2929
ReadContext: resourceRead,
3030
UpdateContext: resourceUpdate,
@@ -113,7 +113,7 @@ func Resource() *schema.Resource {
113113
"storage_databases": schemaFederatedDatabaseInstanceDatabases(),
114114
"storage_stores": schemaFederatedDatabaseInstanceStores(),
115115
},
116-
}
116+
})
117117
}
118118

119119
func schemaFederatedDatabaseInstanceDatabases() *schema.Schema {

internal/service/project/resource_project.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,7 @@ var _ resource.ResourceWithConfigure = &projectRS{}
3737
var _ resource.ResourceWithImportState = &projectRS{}
3838

3939
func Resource() resource.Resource {
40-
return &projectRS{
41-
RSCommon: config.RSCommon{
42-
ResourceName: projectResourceName,
43-
},
44-
}
40+
return config.AnalyticsResource(projectResourceName, &projectRS{})
4541
}
4642

4743
type projectRS struct {

0 commit comments

Comments
 (0)