package main

import (
	"fmt"

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

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

func newApp() *iris.Application {
	app := iris.New()
	app.Use(iris.Compression)

	app.OnAnyErrorCode(onErrorCode)
	app.Get("/", handler)

	app.Configure(iris.WithResetOnFireErrorCode)
	return app
}

// This is the default error handler Iris uses for any error codes.
func onErrorCode(ctx iris.Context) {
	if err := ctx.GetErr(); err != nil {
		ctx.WriteString(err.Error())
	} else {
		ctx.WriteString(iris.StatusText(ctx.GetStatusCode()))
	}
}

func handler(ctx iris.Context) {
	ctx.Record()

	ctx.WriteString("This should NOT be written")

	// [....something bad happened after we "write"]
	err := fmt.Errorf("custom error")
	ctx.StopWithError(iris.StatusBadRequest, err)
}