summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/types/error.go54
1 files changed, 54 insertions, 0 deletions
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)
+}