Files
mautrix-telegram/pkg/gotd/telegram/query/internal/genutil/write.go
T
2025-06-27 20:03:37 -07:00

36 lines
865 B
Go

package genutil
import (
"bytes"
"go/format"
"io"
"io/fs"
"os"
"text/template"
"github.com/go-faster/errors"
"go.mau.fi/mautrix-telegram/pkg/gotd/gen"
)
// WriteTemplate loads template from FS and executes it to given output writer.
func WriteTemplate(source fs.FS, out io.Writer, name string, data interface{}) error {
tmpl := template.New("templates").Funcs(gen.Funcs())
tmpl = template.Must(tmpl.ParseFS(source, "_template/*.tmpl"))
var buf bytes.Buffer
if err := tmpl.ExecuteTemplate(&buf, name, data); err != nil {
return errors.Wrap(err, "template")
}
formatted, err := format.Source(buf.Bytes())
if err != nil {
if _, cpyErr := io.Copy(os.Stdout, &buf); cpyErr != nil {
return errors.Wrapf(cpyErr, "dump generated (original error: %v)", err)
}
return errors.Wrap(err, "format")
}
_, err = out.Write(formatted)
return err
}