mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-07-10 05:27:07 +08:00
temp local copy of userfunc
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
42
util/userfunc/public.go
Normal file
42
util/userfunc/public.go
Normal file
@ -0,0 +1,42 @@
|
||||
package userfunc
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/hcl/v2"
|
||||
"github.com/zclconf/go-cty/cty/function"
|
||||
)
|
||||
|
||||
// A ContextFunc is a callback used to produce the base EvalContext for
|
||||
// running a particular set of functions.
|
||||
//
|
||||
// This is a function rather than an EvalContext directly to allow functions
|
||||
// to be decoded before their context is complete. This will be true, for
|
||||
// example, for applications that wish to allow functions to refer to themselves.
|
||||
//
|
||||
// The simplest use of a ContextFunc is to give user functions access to the
|
||||
// same global variables and functions available elsewhere in an application's
|
||||
// configuration language, but more complex applications may use different
|
||||
// contexts to support lexical scoping depending on where in a configuration
|
||||
// structure a function declaration is found, etc.
|
||||
type ContextFunc func() *hcl.EvalContext
|
||||
|
||||
// DecodeUserFunctions looks for blocks of the given type in the given body
|
||||
// and, for each one found, interprets it as a custom function definition.
|
||||
//
|
||||
// On success, the result is a mapping of function names to implementations,
|
||||
// along with a new body that represents the remaining content of the given
|
||||
// body which can be used for further processing.
|
||||
//
|
||||
// The result expression of each function is parsed during decoding but not
|
||||
// evaluated until the function is called.
|
||||
//
|
||||
// If the given ContextFunc is non-nil, it will be called to obtain the
|
||||
// context in which the function result expressions will be evaluated. If nil,
|
||||
// or if it returns nil, the result expression will have access only to
|
||||
// variables named after the declared parameters. A non-nil context turns
|
||||
// the returned functions into closures, bound to the given context.
|
||||
//
|
||||
// If the returned diagnostics set has errors then the function map and
|
||||
// remain body may be nil or incomplete.
|
||||
func DecodeUserFunctions(body hcl.Body, blockType string, context ContextFunc) (funcs map[string]function.Function, remain hcl.Body, diags hcl.Diagnostics) {
|
||||
return decodeUserFunctions(body, blockType, context)
|
||||
}
|
Reference in New Issue
Block a user