github.com/selefra/selefra-provider-sdk@v0.0.23/provider/transformer/column_value_extractor/column_value_extractor_wrapper.go (about) 1 package column_value_extractor 2 3 import ( 4 "context" 5 "github.com/selefra/selefra-provider-sdk/provider/schema" 6 ) 7 8 // A value extractor with a layer around it, so if you don't want to write structs you can do this anonymously in a method way 9 10 type ColumnValueExtractorWrapper struct { 11 12 // The following sections are from the ColumnValueExtractor 13 name string 14 extract func(ctx context.Context, clientMeta *schema.ClientMeta, client any, task *schema.DataSourcePullTask, row *schema.Row, column *schema.Column, result any) (any, *schema.Diagnostics) 15 dependencyColumnNames func(ctx context.Context, clientMeta *schema.ClientMeta, parentTable *schema.Table, table *schema.Table, column *schema.Column) []string 16 validate func(ctx context.Context, clientMeta *schema.ClientMeta, parentTable *schema.Table, table *schema.Table, column *schema.Column) *schema.Diagnostics 17 } 18 19 var _ schema.ColumnValueExtractor = &ColumnValueExtractorWrapper{} 20 21 func (x *ColumnValueExtractorWrapper) Name() string { 22 return x.name 23 } 24 25 func (x *ColumnValueExtractorWrapper) Extract(ctx context.Context, clientMeta *schema.ClientMeta, client any, task *schema.DataSourcePullTask, row *schema.Row, column *schema.Column, result any) (any, *schema.Diagnostics) { 26 if x.extract == nil { 27 return nil, nil 28 } 29 return x.extract(ctx, clientMeta, client, task, row, column, result) 30 } 31 32 func (x *ColumnValueExtractorWrapper) DependencyColumnNames(ctx context.Context, clientMeta *schema.ClientMeta, parentTable *schema.Table, table *schema.Table, column *schema.Column) []string { 33 if x.dependencyColumnNames == nil { 34 return nil 35 } 36 return x.dependencyColumnNames(ctx, clientMeta, parentTable, table, column) 37 } 38 39 func (x *ColumnValueExtractorWrapper) Validate(ctx context.Context, clientMeta *schema.ClientMeta, parentTable *schema.Table, table *schema.Table, column *schema.Column) *schema.Diagnostics { 40 if x.validate == nil { 41 return schema.NewDiagnostics() 42 } 43 return x.validate(ctx, clientMeta, parentTable, table, column) 44 } 45 46 func Wrapper(extractorName string, 47 extractFunction func(ctx context.Context, clientMeta *schema.ClientMeta, client any, task *schema.DataSourcePullTask, row *schema.Row, column *schema.Column, result any) (any, *schema.Diagnostics), 48 dependencyColumnNames func(ctx context.Context, clientMeta *schema.ClientMeta, parentTable *schema.Table, table *schema.Table, column *schema.Column) []string, 49 validate func(ctx context.Context, clientMeta *schema.ClientMeta, parentTable *schema.Table, table *schema.Table, column *schema.Column) *schema.Diagnostics) schema.ColumnValueExtractor { 50 return &ColumnValueExtractorWrapper{ 51 name: extractorName, 52 extract: extractFunction, 53 dependencyColumnNames: dependencyColumnNames, 54 validate: validate, 55 } 56 } 57 58 func WrapperExtractFunction(extractFunction func(ctx context.Context, clientMeta *schema.ClientMeta, client any, task *schema.DataSourcePullTask, row *schema.Row, column *schema.Column, result any) (any, *schema.Diagnostics)) schema.ColumnValueExtractor { 59 return Wrapper("wrapper-extract-function-column-value-extractor", extractFunction, nil, nil) 60 }