From 81c85afbea23af449d9121365f837595a0da6f51 Mon Sep 17 00:00:00 2001 From: Celestino Amoroso Date: Sat, 27 Apr 2024 22:32:57 +0200 Subject: [PATCH] operand-iterator.go: accepts two new optional functions 'reset' and 'clean' from data-source --- operand-iterator.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/operand-iterator.go b/operand-iterator.go index 5f062f6..0bad7ad 100644 --- a/operand-iterator.go +++ b/operand-iterator.go @@ -54,14 +54,23 @@ func getDataSourceDict(ctx ExprContext, self *term) (ds map[string]Functor, err if dictAny, ok := value.(map[any]any); ok { ds = make(map[string]Functor) - for _, k := range []string{initName, currentName, nextName} { + // required functions + for _, k := range []string{currentName, nextName} { if item, exists := dictAny[k]; exists && item != nil { if functor, ok := item.(*funcDefFunctor); ok { ds[k] = functor } - } else if k != initName { + } else { err = fmt.Errorf("the data-source must provide a non-nil %q operator", k) - break + return + } + } + // Optional functions + for _, k := range []string{initName, resetName, cleanName} { + if item, exists := dictAny[k]; exists && item != nil { + if functor, ok := item.(*funcDefFunctor); ok { + ds[k] = functor + } } } } else { @@ -98,6 +107,9 @@ func evalIterator(ctx ExprContext, self *term) (v any, err error) { dc.nextFunc, _ = ds[nextName] dc.currentFunc, _ = ds[currentName] + dc.cleanFunc, _ = ds[cleanName] + dc.resetFunc, _ = ds[resetName] + v = dc return