3
0
corteza/pkg/errors/modifiers.go
2020-11-04 14:18:33 +01:00

68 lines
1.1 KiB
Go

package errors
type (
mfn func(*Error)
)
// Adds meta
func Meta(k, v interface{}) func(e *Error) {
return func(e *Error) {
if e.meta == nil {
e.meta = meta{}
}
e.meta[k] = v
}
}
// Trim all keys from meta
func MetaTrim(kk ...interface{}) func(e *Error) {
return func(e *Error) {
for _, k := range kk {
delete(e.meta, k)
}
}
}
// StackSkip skips n frames in the stack
//
func StackSkip(n int) func(e *Error) {
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) func(e *Error) {
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) func(e *Error) {
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) func(e *Error) {
return func(e *Error) {
e.wrap = w
}
}