bindv

A tiny Go library for binding and validating HTTP request data. Uses encoding/json for JSON decoding, go-playground/form for form decoding, and go-playground/validator for validation.
Usage
package main
import (
"net/http"
"github.com/fivethirty/bindv"
)
type User struct {
Name string `json:"name" form:"name" validate:"required"`
Email string `json:"email" form:"email" validate:"required,email"`
}
func handleJSON(w http.ResponseWriter, r *http.Request) {
var user User
if err := bindv.JSON(r.Body, &user); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
// Use validated user data...
}
func handleQuery(w http.ResponseWriter, r *http.Request) {
var user User
if err := bindv.Query(r.URL.Query(), &user); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
// Use validated user data...
}
func handleForm(w http.ResponseWriter, r *http.Request) {
var user User
if err := bindv.PostForm(r, &user); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
// Use validated user data...
}
func validateUser() error {
user := User{Name: "John", Email: "invalid-email"}
return bindv.Validate(&user)
}
Error Types
bindv.ErrDecoding - Returned when data cannot be decoded
bindv.ErrValidating - Returned when validation fails