#!/usr/bin/env bash if [ $# -lt 2 ]; then echo >&2 "Usage: $(basename "${0}") <module-name> <func-name>..." exit 1 fi MODULE_NAME=${1,,} GO_FILE="func-${MODULE_NAME//[-.]/_}.go" shift FUNC_LIST= i=0 for name; do if [ ${i} -gt 0 ]; then if [ $((i+1)) -eq $# ]; then FUNC_LIST+=" and " else FUNC_LIST+=", " fi fi FUNC_LIST+="${name}()" ((i++)) done cat > "${GO_FILE}" <<EOF // Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com). // All rights reserved. // func-${MODULE_NAME}.go package expr import ( ) // --- Start of function definitions $( for name; do cat <<IEOF func ${name}Func(ctx ExprContext, name string, args []any) (result any, err error) { return } IEOF done ) // --- End of function definitions // Import above functions in the context func Import${MODULE_NAME^}Funcs(ctx ExprContext) { $( for name; do cat <<IEOF ctx.RegisterFunc("${name}", &simpleFunctor{f: ${name}Func}, 1, -1) IEOF done ) } // Register the import function in the import-register. // That will allow to import all function of this module by the "builtin" operator." func init() { registerImport("${MODULE_NAME}", Import${name}Funcs, "The \"${MODULE_NAME}\" module implements the ${FUNC_LIST} function(s)") } EOF