From 604df67596a2a9f62e75c9e0150d0a14b131e633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20=C3=85hall?= Date: Tue, 26 Sep 2023 08:34:09 +0200 Subject: [PATCH] Initial commit --- pkg.go | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 pkg.go diff --git a/pkg.go b/pkg.go new file mode 100644 index 0000000..57150ec --- /dev/null +++ b/pkg.go @@ -0,0 +1,72 @@ +package WrappedError + +import ( + // Standard + "errors" + "fmt" + "path" + "runtime" +) + +type Error struct { + err error + file string + line int +} + +type LogCallback func(Error) + +var ( + logCallback LogCallback + baseDirLength int +) + +func init() { + _, file, _, _ := runtime.Caller(0) + dir := path.Dir(file) + dirBase := path.Dir(dir) + baseDirLength = len(dirBase) +} + +func SetLogCallback(cbk LogCallback) { + logCallback = cbk +} + +func callback(wrapped Error) { + if logCallback != nil { + logCallback(wrapped) + } +} + +func (wrapped Error) Error() string { + return fmt.Sprintf( + "[%s:%d] %s", + wrapped.file, + wrapped.line, + wrapped.err.Error(), + ) +} + +func create(err error) error { + _, file, line, _ := runtime.Caller(2) + file = file[baseDirLength+1:] + + wrapped := Error{ + err: err, + file: file, + line: line, + } + + callback(wrapped) + + return wrapped +} + +func Wrap(err error) error { + return create(err) +} + +func New(msg string) error { + wrapped := create(errors.New(msg)) + return wrapped +}