providers/import: Add execute function that returns ExecutionResult

This commit is contained in:
Sasha Koshka 2024-12-07 01:57:53 -05:00
parent 1b3c1d3585
commit 30323c0d59

View File

@ -22,6 +22,7 @@ func (this *Provider) FuncMapFor (document *step.Document) template.FuncMap {
document: document,
}
return template.FuncMap {
"execute": stat.funcExecute,
"include": stat.funcInclude,
"includeHTML": stat.funcIncludeHTML,
}
@ -31,16 +32,28 @@ type state struct {
document *step.Document
}
func (this *state) funcInclude (name string, data any) (string, error) {
func (this *state) funcExecute (name string, data any) (step.ExecutionResult, error) {
document, err := this.document.Environment().Parse(name)
if err != nil { return "", err }
if err != nil { return step.ExecutionResult { }, err }
builder := strings.Builder { }
err = document.Execute(&builder, step.ExecutionData { Data: data })
if err != nil { return "", err }
return builder.String(), nil
if err != nil { return step.ExecutionResult { }, err }
return step.ExecutionResult {
Author: document.Author,
Title: document.Title,
Extends: document.Extends,
FrontMatter: document.FrontMatter,
Body: template.HTML(builder.String()),
}, nil
}
func (this *state) funcInclude (name string, data any) (string, error) {
result, err := this.funcIncludeHTML(name, data)
return string(result), err
}
func (this *state) funcIncludeHTML (name string, data any) (template.HTML, error) {
result, err := this.funcInclude(name, data)
return template.HTML(result), err
result, err := this.funcExecute(name, data)
if err != nil { return "", err }
return result.Body, nil
}