75 lines
1.2 KiB
Go
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)
|
|
}
|
|
}
|