From a143b363b52bad93ce5d751fc3c455462ba3d5f7 Mon Sep 17 00:00:00 2001 From: cszczepaniak Date: Sun, 4 Jun 2023 16:17:30 -0500 Subject: [PATCH] add stackerr for stack traces --- pkg/stackerr/stackerr.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 pkg/stackerr/stackerr.go diff --git a/pkg/stackerr/stackerr.go b/pkg/stackerr/stackerr.go new file mode 100644 index 00000000..079762a1 --- /dev/null +++ b/pkg/stackerr/stackerr.go @@ -0,0 +1,36 @@ +package stackerr + +import ( + "fmt" + "runtime/debug" +) + +type StackErr struct { + cause error + stack []byte +} + +func NewStackErr(cause error) error { + return StackErr{ + cause: cause, + stack: debug.Stack(), + } +} + +func NewStackErrf(cause error, f string, args ...any) error { + msg := fmt.Sprintf(f, args...) + cause = fmt.Errorf(msg+": %w", cause) + return NewStackErr(cause) +} + +func (se StackErr) Error() string { + return se.cause.Error() +} + +func (se StackErr) Unwrap() error { + return se.cause +} + +func (se StackErr) Stack() []byte { + return se.stack +}