Files
kandev/apps/backend/internal/office/shared/variables.go
T
2026-05-16 20:07:57 +01:00

47 lines
1.2 KiB
Go

package shared
import (
"regexp"
"strings"
"time"
)
var templateVarRe = regexp.MustCompile(`\{\{(\w+)\}\}`)
// BuiltinVars returns the built-in template variable values for the given time.
func BuiltinVars(now time.Time) map[string]string {
return map[string]string{
"date": now.Format("2006-01-02"),
"datetime": now.Format(time.RFC3339),
}
}
// ResolveVariables merges builtins, declared defaults, and provided values.
// Later sources override earlier ones: builtins < defaults < provided.
func ResolveVariables(
now time.Time,
declaredDefaults map[string]string,
provided map[string]string,
) map[string]string {
merged := BuiltinVars(now)
for k, v := range declaredDefaults {
merged[k] = v
}
for k, v := range provided {
merged[k] = v
}
return merged
}
// InterpolateTemplate replaces {{name}} placeholders with resolved values.
// Unknown variables are left as-is.
func InterpolateTemplate(tmpl string, vars map[string]string) string {
return templateVarRe.ReplaceAllStringFunc(tmpl, func(match string) string {
name := strings.TrimPrefix(strings.TrimSuffix(match, "}}"), "{{")
if val, ok := vars[name]; ok {
return val
}
return match
})
}