/
protodatasource.go
37 lines (30 loc) · 1.48 KB
/
protodatasource.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package bzdatasource
import (
"context"
"github.com/bastionzero/bastionzero-sdk-go/bastionzero"
"github.com/hashicorp/terraform-plugin-framework/datasource"
)
// Anonymous interface implementation via prototype struct and embedding
//
// Source: https://stackoverflow.com/a/31362378
// Ensure prototype implements data source framework interface
var _ datasource.DataSourceWithConfigure = &protoDataSource{}
type protoDataSource struct {
client *bastionzero.Client
metadataFunc func(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse)
schemaFunc func(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse)
configureFunc func(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse)
readFunc func(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse)
}
func (p *protoDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
p.metadataFunc(ctx, req, resp)
}
func (p *protoDataSource) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) {
p.schemaFunc(ctx, req, resp)
}
func (p *protoDataSource) Configure(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
p.configureFunc(ctx, req, resp)
}
func (p *protoDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
p.readFunc(ctx, req, resp)
}