-
Notifications
You must be signed in to change notification settings - Fork 0
/
fn_basic.go
63 lines (53 loc) · 1.32 KB
/
fn_basic.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
package fn
// manual write functions
import "fmt"
type PackedError struct {
Origin any
Caller string
}
func (p PackedError) Error() string {
switch err := p.Origin.(type) {
case error:
return fmt.Sprintf("%s\t%s", p.Caller, err)
default:
return fmt.Sprintf("%s\t%#v", p.Caller, err)
}
}
//NewCallShortFileError impl ErrorPacker with caller file line
func NewCallShortFileError(origin any, caller uint) error {
return &PackedError{Origin: origin, Caller: CallerShortFileN(caller)}
}
//NewCallFileError impl ErrorPacker with caller file line
func NewCallFileError(origin any, caller uint) error {
return &PackedError{Origin: origin, Caller: CallerFileN(caller)}
}
//NewCallFuncError impl ErrorPacker with caller func and file line
func NewCallFuncError(origin any, caller uint) error {
return &PackedError{Origin: origin, Caller: CallerN(caller)}
}
//ErrorPacker func to pack error with origin caller location
type ErrorPacker func(any, uint) error
// Recover a runnable
func Recover(fn func()) (err error) {
defer func() {
if r := recover(); r != nil {
err = Packer(r, 3)
}
}()
fn()
return
}
//Panic error
func Panic(err error) {
if err != nil {
panic(Packer(err, 2))
}
}
//Panics return a Runnable
func Panics(fn func() error) func() {
return func() {
if err := fn(); err != nil {
panic(Packer(err, 3))
}
}
}