forked from cortezaproject/corteza
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodifiers.go
74 lines (63 loc) · 1.17 KB
/
modifiers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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)
}
}