package main

import (
	"github.com/kataras/iris/v12"
)

type Company struct {
	Name  string
	City  string
	Other string
}

func MyHandler(ctx iris.Context) {
	var c Company

	if err := ctx.ReadJSON(&c); err != nil {
		ctx.StopWithError(iris.StatusBadRequest, err)
		return
	}

	ctx.Writef("Received: %#+v\n", c)
}

// simple json stuff, read more at https://golang.org/pkg/encoding/json
type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

// MyHandler2 reads a collection of Person from JSON post body.
func MyHandler2(ctx iris.Context) {
	var persons []Person
	err := ctx.ReadJSON(&persons)
	if err != nil {
		ctx.StopWithError(iris.StatusBadRequest, err)
		return
	}

	ctx.Writef("Received: %#+v\n", persons)
}

func main() {
	app := iris.New()

	app.Post("/", MyHandler)
	app.Post("/slice", MyHandler2)

	// use Postman or whatever to do a POST request
	// to the http://localhost:8080 with RAW BODY:
	/*
		{
			"Name": "iris-Go",
			"City": "New York",
			"Other": "Something here"
		}
	*/
	// and Content-Type to application/json (optionally but good practise)
	//
	// The response should be:
	// Received: main.Company{Name:"iris-Go", City:"New York", Other:"Something here"}
	app.Listen(":8080", iris.WithOptimizations)
}