From 28a5d1ea9050ab85b63e54d74d004100c34640d1 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Sun, 1 Mar 2026 23:35:08 -0600 Subject: [PATCH] wrap literal payloads into a struct for expr processors --- internal/processor/filter-expr.go | 24 ++++++++++++++++++++++-- internal/processor/script-expr.go | 19 ++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/internal/processor/filter-expr.go b/internal/processor/filter-expr.go index 94269c5..f442e86 100644 --- a/internal/processor/filter-expr.go +++ b/internal/processor/filter-expr.go @@ -15,9 +15,29 @@ type FilterExpr struct { Program *vm.Program } -func (se *FilterExpr) Process(ctx context.Context, payload any) (any, error) { +type PayloadStruct struct { + Payload any +} - output, err := expr.Run(se.Program, payload) +func (se *FilterExpr) Process(ctx context.Context, payload any) (any, error) { + payloadType := fmt.Sprintf("%T", payload) + + exprEnv := payload + + switch payloadType { + case "uint", "uint8", "uint16", "uint32", "uint64": + exprEnv = PayloadStruct{Payload: payload} + case "int", "int8", "int16", "int32", "int64": + exprEnv = PayloadStruct{Payload: payload} + case "float32", "float64": + exprEnv = PayloadStruct{Payload: payload} + case "string": + exprEnv = PayloadStruct{Payload: payload} + case "bool": + exprEnv = PayloadStruct{Payload: payload} + } + + output, err := expr.Run(se.Program, exprEnv) if err != nil { return nil, err } diff --git a/internal/processor/script-expr.go b/internal/processor/script-expr.go index 237d7f0..0a4440b 100644 --- a/internal/processor/script-expr.go +++ b/internal/processor/script-expr.go @@ -17,7 +17,24 @@ type ScriptExpr struct { func (se *ScriptExpr) Process(ctx context.Context, payload any) (any, error) { - output, err := expr.Run(se.Program, payload) + payloadType := fmt.Sprintf("%T", payload) + + exprEnv := payload + + switch payloadType { + case "uint", "uint8", "uint16", "uint32", "uint64": + exprEnv = PayloadStruct{Payload: payload} + case "int", "int8", "int16", "int32", "int64": + exprEnv = PayloadStruct{Payload: payload} + case "float32", "float64": + exprEnv = PayloadStruct{Payload: payload} + case "string": + exprEnv = PayloadStruct{Payload: payload} + case "bool": + exprEnv = PayloadStruct{Payload: payload} + } + + output, err := expr.Run(se.Program, exprEnv) if err != nil { return nil, err }