3
0
corteza/pkg/errors/modifiers.go
Denis Arh 92ca66cade Improve corredor auto. server error handling
Errors are now typified, node.js stack from error is accepted and converted
2020-11-05 07:57:27 +01:00

75 lines
1.2 KiB
Go

package errors
type (
mfn func(*Error)
)
// Adds meta
func Meta(k, v interface{}) mfn {
return func(e *Error) {
if e.meta == nil {
e.meta = meta{}
}
e.meta[k] = v
}
}
// Trim all keys from meta
func MetaTrim(kk ...interface{}) mfn {
return func(e *Error) {
for _, k := range kk {
delete(e.meta, k)
}
}
}
// StackSkip skips n frames in the stack
//
func StackSkip(n int) mfn {
return func(e *Error) {
if n > len(e.stack) {
e.stack = nil
}
e.stack = e.stack[n:]
}
}
// StackTrim removes n frames from the end of the stack
func StackTrim(n int) mfn {
return func(e *Error) {
if len(e.stack) < n {
e.stack = nil
}
e.stack = e.stack[:len(e.stack)-n]
}
}
// StackTrimAtFn removes all frames after (inclusive) the (1st) function match
func StackTrimAtFn(fn string) mfn {
return func(e *Error) {
for i := range e.stack {
if i > 2 && e.stack[i].Func == fn {
e.stack = e.stack[:i]
break
}
}
}
}
// Wrap embeds error
func Wrap(w error) mfn {
return func(e *Error) {
e.wrap = w
}
}
// Converts and attaches node.js stack to error
func AddNodeStack(stack []string) mfn {
return func(e *Error) {
e.stack = convertNodeStack(stack)
}
}