From 3b4282861d8ac521dcb5cf79330fcc4eac59ba44 Mon Sep 17 00:00:00 2001 From: jwijenbergh Date: Mon, 11 Jul 2022 15:50:00 +0200 Subject: Types + Exports: Return JSON and use error level --- internal/types/error.go | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'internal/types') diff --git a/internal/types/error.go b/internal/types/error.go index fda7c9c..e5bd082 100644 --- a/internal/types/error.go +++ b/internal/types/error.go @@ -2,10 +2,22 @@ package types import ( "errors" + "encoding/json" "fmt" ) +type ErrorLevel int8 + +const ( + // All other errors + ERR_OTHER ErrorLevel = iota + + // The error is just here as additional info + ERR_INFO +) + type WrappedErrorMessage struct { + Level ErrorLevel Message string Err error } @@ -60,3 +72,45 @@ func GetErrorCause(err error) error { } return err } + +func GetErrorLevel(err error) ErrorLevel { + var wrappedErr *WrappedErrorMessage + + if errors.As(err, &wrappedErr) { + return wrappedErr.Level + } + return ERR_OTHER +} + +type WrappedErrorMessageJSON struct { + Level ErrorLevel `json:"level"` + Cause string `json:"cause"` + Traceback string `json:"traceback"` +} + + +func GetErrorJSONString(err error) string { + var wrappedErr *WrappedErrorMessage + + var level ErrorLevel + var cause error + var traceback string + + if errors.As(err, &wrappedErr) { + level = wrappedErr.Level + cause = wrappedErr.Cause() + traceback = wrappedErr.Traceback() + } else { + level = ERR_OTHER + cause = err + traceback = err.Error() + } + + + json, jsonErr := json.Marshal(&WrappedErrorMessageJSON{Level: level, Cause: cause.Error(), Traceback: traceback}) + + if jsonErr != nil { + panic(jsonErr) + } + return string(json) +} -- cgit v1.2.3