github.com/Jeffail/benthos/v3@v3.65.0/public/service/interpolated_string.go (about)

     1  package service
     2  
     3  import (
     4  	"github.com/Jeffail/benthos/v3/internal/bloblang"
     5  	"github.com/Jeffail/benthos/v3/internal/bloblang/field"
     6  	"github.com/Jeffail/benthos/v3/lib/types"
     7  )
     8  
     9  // InterpolatedString resolves a string containing dynamic interpolation
    10  // functions for a given message.
    11  type InterpolatedString struct {
    12  	expr *field.Expression
    13  }
    14  
    15  // NewInterpolatedString parses an interpolated string expression.
    16  func NewInterpolatedString(expr string) (*InterpolatedString, error) {
    17  	e, err := bloblang.GlobalEnvironment().NewField(expr)
    18  	if err != nil {
    19  		return nil, err
    20  	}
    21  	return &InterpolatedString{expr: e}, nil
    22  }
    23  
    24  type fauxOldMessage struct {
    25  	p types.Part
    26  }
    27  
    28  func (f fauxOldMessage) Get(i int) types.Part {
    29  	return f.p
    30  }
    31  
    32  func (f fauxOldMessage) Len() int {
    33  	return 1
    34  }
    35  
    36  // String resolves the interpolated field for a given message as a string.
    37  func (i *InterpolatedString) String(m *Message) string {
    38  	return i.expr.String(0, fauxOldMessage{m.part})
    39  }
    40  
    41  // Bytes resolves the interpolated field for a given message as a byte slice.
    42  func (i *InterpolatedString) Bytes(m *Message) []byte {
    43  	return i.expr.Bytes(0, fauxOldMessage{m.part})
    44  }