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 }