wrappederror/README.md
2024-09-27 07:43:50 +02:00

941 B

package main

import (
	// External
	werr "git.gibonuddevalla.se/go/wrappederror"

	// Standard
	"encoding/json"
	"errors"
	"fmt"
	"os"
)

func errorHandler(err werr.Error) {
	// For example print or log error to file
	fmt.Printf("\x1b[31;1m%s\x1b[0m\n", err)
	fmt.Printf("\x1b[33;1m%s\x1b[0m\n", err.NoTrace())

	j, _ := json.MarshalIndent(err, "", "    ")
	fmt.Printf("%s\n\n", j)
}

func main() {
	// Make file paths relative to this file.
	werr.Init()

	// Handler to call when using Log().
	werr.SetLogCallback(errorHandler)

	// Wrap an existing error.
	err := errors.New("foobar 1")
	err1 := werr.Wrap(err)

	// Create a new error with extra information.
	err2 := werr.New("foobar 2").WithCode("FOO-100").WithData(137)

	// The os error contains more information.
	_, errOS := os.ReadFile("/tmp/does_not_exist")
	werr.Wrap(errOS).Log()

	// Log the previously wrapped errors.
	werr.Wrap(err1).Log()
	werr.Wrap(err2).Log()
}