package main

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

func main() {
	app := newApp()
	app.Logger().SetLevel("debug")
	app.Listen(":8080")
}

func newApp() *iris.Application {
	app := iris.New()
	// HERE and you are ready to GO:
	app.Use(iris.Compression)

	app.Get("/", send)
	app.Post("/", receive)

	return app
}

type payload struct {
	Username string `json:"username"`
}

func send(ctx iris.Context) {
	ctx.JSON(payload{
		Username: "Makis",
	})
}

func receive(ctx iris.Context) {
	var p payload
	if err := ctx.ReadJSON(&p); err != nil {
		ctx.Application().Logger().Debugf("ReadJSON: %v", err)
	}

	ctx.WriteString(p.Username)
}

/* Manually:
func enableCompression(ctx iris.Context) {
	// Enable writing using compression (deflate, gzip, brotli, snappy, s2):
	err := ctx.CompressWriter(true)
	if err != nil {
		ctx.Application().Logger().Debugf("writer: %v", err)
		// if you REQUIRE server to SEND compressed data then `return` here.
		// return
	}

	// Enable reading and binding request's compressed data:
	err = ctx.CompressReader(true)
	if err != nil &&
		// on GET we don't expect writing with gzip from client
		ctx.Method() != iris.MethodGet  {
		ctx.Application().Logger().Debugf("reader: %v", err)
		// if you REQUIRE server to RECEIVE only
		// compressed data then `return` here.
		// return
	}

	ctx.Next()
}
*/