go-watch/util.go

55 lines
1.3 KiB
Go

package main
import (
"errors"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
)
func bindAndValidateWatch(watch *Watch, c *gin.Context) (map[string]string, error) {
err := c.ShouldBind(watch)
return validate(err), err
}
func bindAndValidateURL(url *URL, c *gin.Context) (map[string]string, error) {
err := c.ShouldBind(url)
return validate(err), err
}
func bindAndValidateQuery(query *Query, c *gin.Context) (map[string]string, error) {
err := c.ShouldBind(query)
return validate(err), err
}
func bindAndValidateFilter(filter *Filter, c *gin.Context) (map[string]string, error) {
err := c.ShouldBind(filter)
return validate(err), err
}
func bindAndValidateQueryUpdate(query *QueryUpdate, c *gin.Context) (map[string]string, error) {
err := c.ShouldBind(query)
return validate(err), err
}
func prettyError(fieldError validator.FieldError) string {
switch fieldError.Tag() {
case "required":
return fieldError.Field() + " is required"
default:
return "No prettyError for " + fieldError.Tag()
}
}
func validate(err error) map[string]string {
out := make(map[string]string)
if err != nil {
var ve validator.ValidationErrors
if errors.As(err, &ve) {
for _, fe := range ve {
out[fe.Field()] = prettyError(fe)
}
}
}
return out
}