internal/export/object_transformer.go (43 lines of code) (raw):
// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
// or more contributor license agreements. Licensed under the Elastic License;
// you may not use this file except in compliance with the Elastic License.
package export
import (
"fmt"
"github.com/elastic/elastic-package/internal/common"
)
type objectTransformer struct {
ctx *transformationContext
transforms []func(*transformationContext, common.MapStr) (common.MapStr, error)
}
type transformationContext struct {
packageName string
}
func newObjectTransformer() *objectTransformer {
return new(objectTransformer)
}
func (ot *objectTransformer) transform(objects []common.MapStr) ([]common.MapStr, error) {
var decoded []common.MapStr
var err error
for _, object := range objects {
for _, fn := range ot.transforms {
if object == nil {
continue
}
object, err = fn(ot.ctx, object)
if err != nil {
id, _ := object.GetValue("id")
return nil, fmt.Errorf("object transformation failed (ID: %s): %w", id, err)
}
}
if object != nil {
decoded = append(decoded, object)
}
}
return decoded, nil
}
func (ot *objectTransformer) withContext(ctx *transformationContext) *objectTransformer {
ot.ctx = ctx
return ot
}
func (ot *objectTransformer) withTransforms(transforms ...func(*transformationContext, common.MapStr) (common.MapStr, error)) *objectTransformer {
ot.transforms = transforms
return ot
}