Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ require (
github.com/urfave/cli/v2 v2.27.6
github.com/xeipuuv/gojsonschema v1.2.0
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a
go.jetify.com/typeid v1.3.0
go.opentelemetry.io/otel v1.36.0
go.opentelemetry.io/otel/trace v1.36.0
go.uber.org/multierr v1.11.0
Expand Down Expand Up @@ -70,7 +71,6 @@ require (
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/otel/metric v1.36.0 // indirect
golang.org/x/sys v0.33.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)

go 1.24.1
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@ github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGC
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk=
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4=
go.jetify.com/typeid v1.3.0 h1:fuWV7oxO4mSsgpxwhaVpFXgt0IfjogR29p+XAjDCVKY=
go.jetify.com/typeid v1.3.0/go.mod h1:CtVGyt2+TSp4Rq5+ARLvGsJqdNypKBAC6INQ9TLPlmk=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
Expand Down
30 changes: 30 additions & 0 deletions internal/bloblang/query/functions.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/gofrs/uuid/v5"
gonanoid "github.com/matoous/go-nanoid/v2"
"github.com/segmentio/ksuid"
"go.jetify.com/typeid"

"github.com/redpanda-data/benthos/v4/internal/tracing"
"github.com/redpanda-data/benthos/v4/internal/value"
Expand Down Expand Up @@ -954,6 +955,35 @@ var _ = registerFunction(

//------------------------------------------------------------------------------

var _ = registerFunction(
NewFunctionSpec(
FunctionCategoryGeneral, "typeid",
"Generates a new typeid each time it is invoked and prints a string representation.",
NewExampleSpec("", `root.id = typeid()`),
NewExampleSpec("It is also possible to specify a prefix for the typeid", `root.id = typeid("prefix")`),
).Param(ParamString("prefix", "An optional prefix to use for the typeid.").Optional()),
func(args *ParsedParams) (Function, error) {
prefixArg, err := args.FieldOptionalString("prefix")
if err != nil {
return nil, err
}
return ClosureFunction("function typeid", func(_ FunctionContext) (any, error) {
var prefix string
if prefixArg != nil {
prefix = *prefixArg
}

tid, err := typeid.WithPrefix(prefix)
if err != nil {
return nil, fmt.Errorf("unable to generate typeid: %w", err)
}
return tid, nil
}, nil), nil
},
)

//------------------------------------------------------------------------------

var _ = registerFunction(
NewFunctionSpec(
FunctionCategoryGeneral, "nanoid",
Expand Down
27 changes: 27 additions & 0 deletions internal/bloblang/query/functions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/gofrs/uuid/v5"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.jetify.com/typeid"

"github.com/redpanda-data/benthos/v4/internal/message"
)
Expand Down Expand Up @@ -273,6 +274,32 @@ func TestUUIDV7FunctionAtTime(t *testing.T) {
assert.Equal(t, ts.Truncate(time.Millisecond), actual, "expected: %s, got: %s", ts, actual)
}

func TestTypeidFunction(t *testing.T) {
e, err := InitFunctionHelper("typeid")
require.NoError(t, err)

res, err := e.Exec(FunctionContext{})
require.NoError(t, err)

id, ok := res.(typeid.AnyID)
require.True(t, ok)
require.Empty(t, id.Prefix())
require.NotEmpty(t, id.Suffix())
}

func TestTypeidFunctionPrefix(t *testing.T) {
e, err := InitFunctionHelper("typeid", "user")
require.NoError(t, err)

res, err := e.Exec(FunctionContext{})
require.NoError(t, err)

id, ok := res.(typeid.AnyID)
require.True(t, ok)
require.Equal(t, "user", id.Prefix())
require.NotEmpty(t, id.Suffix())
}

func TestNanoidFunction(t *testing.T) {
e, err := InitFunctionHelper("nanoid")
require.NoError(t, err)
Expand Down