Files
godoxy-yusing/internal/route/rules/template.go

49 lines
1.0 KiB
Go

package rules
import (
"bytes"
"io"
"net/http"
)
type templateOrStr interface {
Execute(w io.Writer, data any) error
Len() int
}
type strTemplate string
func (t strTemplate) Execute(w io.Writer, _ any) error {
n, err := w.Write([]byte(t))
if err != nil {
return err
}
if n != len(t) {
return io.ErrShortWrite
}
return nil
}
func (t strTemplate) Len() int {
return len(t)
}
type keyValueTemplate = Tuple[string, templateOrStr]
func executeRequestTemplateString(tmpl templateOrStr, r *http.Request) (string, error) {
var buf bytes.Buffer
err := tmpl.Execute(&buf, reqResponseTemplateData{Request: r})
if err != nil {
return "", err
}
return buf.String(), nil
}
func executeRequestTemplateTo(tmpl templateOrStr, o io.Writer, r *http.Request) error {
return tmpl.Execute(o, reqResponseTemplateData{Request: r})
}
func executeReqRespTemplateTo(tmpl templateOrStr, o io.Writer, w http.ResponseWriter, r *http.Request) error {
return tmpl.Execute(o, reqResponseTemplateData{Request: r, Response: GetInitResponseModifier(w).Response()})
}