3
0
Files
corteza/pkg/codegen/assets/afunc.gen.go.tpl
Denis Arh cfe02be081 Add support for labels on automation functions
Idea for these labels is to give instructions which labels to copy
on step and on workflow when function step is added to the graph.

Labels are defined with "step,workflow", "workflow" or "step" for value.
UI should follow these instructions when copying labels to workflow
and/or step.
2021-03-12 13:12:07 +01:00

268 lines
6.3 KiB
Smarty

package {{ .Package }}
// This file is auto-generated.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
// Definitions file that controls how this file is generated:
// {{ .Source }}
import (
atypes "github.com/cortezaproject/corteza-server/automation/types"
"context"
"github.com/cortezaproject/corteza-server/pkg/expr"
"github.com/cortezaproject/corteza-server/pkg/wfexec"
{{- range .Imports }}
{{ normalizeImport . }}
{{- end }}
)
var _ wfexec.ExecResponse
type (
{{ $.Name }}HandlerRegistry interface {
AddFunctions(ff ...*atypes.Function)
Type(ref string) expr.Type
}
)
func (h {{ $.Name }}Handler) register() {
h.reg.AddFunctions(
{{- range .Functions }}
h.{{ export .Name }}(),
{{- end }}
)
}
{{ range .Functions }}
{{ $REF := unexport $.Prefix $.Name .Name }}
{{ $ARGS := unexport $.Name .Name "Args" }}
{{ $RESULTS := unexport $.Name .Name "Results" }}
type (
{{ $ARGS }} struct {
{{ range .Params }}
{{ $name := .Name }}
{{ $isArray := .IsArray }}
has{{ export .Name }} bool
{{- if gt (len .Types) 1 }}
{{ export .Name }} interface{}
{{- range .Types }}
{{ $name }}{{ export .Suffix }} {{ if $isArray }}[]{{ end }}{{ .GoType }}
{{- end }}
{{- else -}}
{{ range .Types }}
{{ export $name }}{{ export .Suffix }} {{ if $isArray }}[]{{ end }}{{ .GoType }}
{{- end }}
{{- end -}}
{{- end }}
}
{{ if .Results }}
{{ unexport $.Name .Name }}Results struct {
{{ range .Results }}
{{ export .Name }} {{ if .IsArray }}[]{{ end }}{{ .GoType }}
{{- end }}
}
{{- end }}
)
{{ range .Params }}
{{- if gt (len .Types) 1 }}
{{ $name := .Name }}
func (a {{ $ARGS }}) {{ export "get" $name }}() (bool, {{ range .Types }}{{ .GoType }},{{ end }}) {
return a.has{{ export $name }}{{ range .Types }}, a.{{ $name }}{{ export .Suffix }}{{ end }}
}
{{- end }}
{{- end }}
// {{ export .Name }} function {{ .Meta.Short }}
//
// expects implementation of {{ .Name }} function:
// func (h {{ $.Name }}Handler) {{ .Name }}(ctx context.Context, args *{{ $ARGS }}) ({{ if .Results }}results *{{ $RESULTS }}, {{ end }}err error) {
// return
// }
func (h {{ $.Name }}Handler) {{ export .Name }}() *atypes.Function {
return &atypes.Function{
Ref: {{ printf "%q" ( $REF ) }},
Kind: {{ printf "%q" .Kind }},
Labels: {{ printf "%#v" .Labels }},
{{- if .Meta }}
Meta: &atypes.FunctionMeta{
{{- if .Meta.Short }}
Short: {{ printf "%q" .Meta.Short }},
{{- end }}
{{- if .Meta.Description }}
Description: {{ printf "%q" .Meta.Description }},
{{- end }}
{{- if .Meta.Visual }}
Visual: {{ printf "%#v" .Meta.Visual }},
{{- end }}
},
{{- end }}
Parameters: []*atypes.Param{
{{- range .Params }}
{
Name: {{ printf "%q" .Name }},
Types: []string{ {{ range .Types }}{{ printf "%q" .WorkflowType }},{{ end }} },
{{- if .Required }}Required: true,{{ end }}
{{- if .IsArray }}IsArray: true,{{ end }}
{{- if .Meta }}
Meta: &atypes.ParamMeta{
{{- if .Meta.Label }}
Label: {{ printf "%#v" .Meta.Label }},
{{- end }}
{{- if .Meta.Description }}
Description: {{ printf "%#v" .Meta.Description }},
{{- end }}
{{- if .Meta.Visual }}
Visual: {{ printf "%#v" .Meta.Visual }},
{{- end }}
},
{{ end }}
},
{{- end }}
},
{{ if .Results }}
Results: []*atypes.Param{
{{ range .Results }}
{
Name: {{ printf "%q" .Name }},
Types: []string{ {{ printf "%q" .WorkflowType }} },
{{ if .IsArray }}IsArray: true,{{ end -}}
{{ if .Meta -}}
Meta: &atypes.ParamMeta{
{{- if .Meta.Label }}
Label: {{ printf "%#v" .Meta.Label }},
{{- end }}
{{- if .Meta.Description }}
Description: {{ printf "%#v" .Meta.Description }},
{{- end }}
{{- if .Meta.Visual }}
Visual: {{ printf "%#v" .Meta.Visual }},
{{- end }}
},
{{ end }}
},
{{ end }}
},
{{ end }}
{{ if eq .Kind "iterator" }}
Iterator: func(ctx context.Context, in *expr.Vars) (out wfexec.IteratorHandler, err error) {
var (
args = &{{ $ARGS }}{
{{- range .Params }}
has{{ export .Name }}: in.Has({{ printf "%q" .Name }}),
{{- end }}
}
)
{{ template "params" .Params }}
return h.{{ .Name }}(ctx, args)
},
{{ else }}
Handler: func(ctx context.Context, in *expr.Vars) (out *expr.Vars, err error) {
var (
args = &{{ $ARGS }}{
{{- range .Params }}
has{{ export .Name }}: in.Has({{ printf "%q" .Name }}),
{{- end }}
}
)
{{ template "params" .Params }}
{{ if .Results }}
var results *{{ $RESULTS }}
if results, err = h.{{ .Name }}(ctx, args); err != nil {
return
}
out = &expr.Vars{}
{{- range .Results }}
{{ if .IsArray }}
{
// converting results.{{ export .Name }} ({{ .GoType }}) to Array (of {{ .WorkflowType }})
var (
tval expr.TypedValue
tarr = make([]expr.TypedValue, len(results.{{ export .Name }}))
)
for i := range results.{{ export .Name }} {
if tarr[i], err = h.reg.Type({{ printf "%q" .WorkflowType }}).Cast(results.{{ export .Name }}[i]); err != nil {
return
}
}
if tval, err = expr.NewArray(tarr); err != nil {
return
} else if err = expr.Assign(out, {{ printf "%q" .Name }}, tval); err != nil {
return
}
}
{{ else }}
{
// converting results.{{ export .Name }} ({{ .GoType }}) to {{ .WorkflowType }}
var (
tval expr.TypedValue
)
if tval, err = h.reg.Type({{ printf "%q" .WorkflowType }}).Cast(results.{{ export .Name }}); err != nil {
return
} else if err = expr.Assign(out, {{ printf "%q" .Name }}, tval); err != nil {
return
}
}
{{ end }}
{{ end }}
return
{{- else }}
return out, h.{{ .Name }}(ctx, args)
{{- end }}
},
{{ end }}
}
}
{{ end }}
{{ define "params" }}
if err = in.Decode(args); err != nil {
return
}
{{ range . }}
{{ $name := .Name }}
{{ if gt (len .Types) 1 }}
// Converting {{ export .Name }} argument
if args.has{{ export .Name }} {
aux := expr.Must(expr.Select(in, {{ printf "%q" .Name }}))
switch aux.Type() {
{{- range .Types }}
case h.reg.Type({{ printf "%q" .WorkflowType }}).Type():
args.{{ $name }}{{ export .Suffix }} = aux.Get().({{ .GoType }})
{{- end -}}
}
}
{{- end }}
{{ end }}
{{ end }}