package main import ( "fmt" "log" "net/http" "github.com/gorilla/schema" ) var schemaDecoder *schema.Decoder func init() { schemaDecoder = schema.NewDecoder() } type fieldError struct { Field string Issue string } func (fe fieldError) Error() string { return fmt.Sprintf("%s: %v", fe.Field, fe.Issue) } func (fe fieldError) FieldError() (field, err string) { return fe.Field, fe.Issue } func parseForm[T any](r *http.Request, data *T) { if err := r.ParseForm(); err != nil { log.Panic("Parsing form: ", err) } if err := schemaDecoder.Decode(data, r.PostForm); err != nil { log.Panic("Decoding form: ", err) } }