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  }