| | | 1 | | package tmpl |
| | | 2 | | |
| | | 3 | | import ( |
| | | 4 | | "bytes" |
| | | 5 | | "fmt" |
| | | 6 | | "text/template" |
| | | 7 | | |
| | | 8 | | "github.com/jedi-knights/go-semantic-release/internal/ports" |
| | | 9 | | ) |
| | | 10 | | |
| | | 11 | | // Compile-time interface compliance check. |
| | | 12 | | var _ ports.TemplateRenderer = (*GoTemplateRenderer)(nil) |
| | | 13 | | |
| | | 14 | | // GoTemplateRenderer implements ports.TemplateRenderer using Go's text/template. |
| | | 15 | | type GoTemplateRenderer struct{} |
| | | 16 | | |
| | | 17 | | // NewGoTemplateRenderer creates a new Go template renderer. |
| | 5 | 18 | | func NewGoTemplateRenderer() *GoTemplateRenderer { |
| | 5 | 19 | | return &GoTemplateRenderer{} |
| | 5 | 20 | | } |
| | | 21 | | |
| | | 22 | | func (r *GoTemplateRenderer) Render(templateStr string, data any) (string, error) { |
| | | 23 | | tmpl, err := template.New("render").Parse(templateStr) |
| | | 24 | | if err != nil { |
| | | 25 | | return "", fmt.Errorf("parsing template: %w", err) |
| | | 26 | | } |
| | | 27 | | |
| | | 28 | | var buf bytes.Buffer |
| | | 29 | | if err := tmpl.Execute(&buf, data); err != nil { |
| | | 30 | | return "", fmt.Errorf("executing template: %w", err) |
| | | 31 | | } |
| | | 32 | | return buf.String(), nil |
| | | 33 | | } |