Skip to content

Package binding is a middleware that provides request data binding and validation for Flamego

License

Notifications You must be signed in to change notification settings

flamego/binding

Repository files navigation

binding

GitHub Workflow Status Codecov GoDoc Sourcegraph

Package binding is a middleware that provides request data binding and validation for Flamego.

Installation

The minimum requirement of Go is 1.18.

go get github.com/flamego/binding

Getting started

package main

import (
	"fmt"
	"net/http"

	"github.com/flamego/binding"
	"github.com/flamego/flamego"
)

type address struct {
	Street string `json:"street" validate:"required"`
	City   string `json:"city" validate:"required"`
	Planet string `json:"planet" validate:"required"`
	Phone  string `json:"phone" validate:"required"`
}

type user struct {
	FirstName string     `json:"first_name" validate:"required"`
	LastName  string     `json:"last_name" validate:"required"`
	Age       uint8      `json:"age" validate:"gte=0,lte=130"`
	Email     string     `json:"email" validate:"required,email"`
	Addresses []*address `json:"addresses" validate:"required,dive,required"`
}

func main() {
	f := flamego.Classic()
	f.Post("/", binding.JSON(user{}), func(c flamego.Context, form user, errs binding.Errors) {
		if len(errs) > 0 {
			c.ResponseWriter().WriteHeader(http.StatusBadRequest)
			_, _ = c.ResponseWriter().Write([]byte(fmt.Sprintf("Oops! Error occurred: %v", errs[0].Err)))
			return
		}

		fmt.Printf("Name: %s %s\n", form.FirstName, form.LastName)
	})
	f.Run()
}

Getting help

License

This project is under the MIT License. See the LICENSE file for the full license text.