@@ -8,23 +8,25 @@ import (
8
8
// Guard invokes "rollback functions" if Rollback method received non-nil value
9
9
// (e.g. recover(), non-nil error).
10
10
type Guard interface {
11
- // Rollback rolls back if v is non-nil.
11
+ // Error sets v as an error if v is non-nil.
12
+ // This returns the error.
12
13
//
13
- // defer func() { err = g.Rollback(recover()) }()
14
+ // defer func() {
15
+ // result = g.Error(recover())
16
+ // }()
14
17
//
15
18
// // or
16
19
//
17
- // if e != nil {
18
- // err = g.Rollback(e)
19
- // err = g.Rollback(e) // this won't call rollback functions twice!
20
- // return
20
+ // if err != nil {
21
+ // return g.Error(err)
21
22
// }
22
- Rollback (v interface {}) error
23
+ //
24
+ Error (v interface {}) error
23
25
24
- // RollbackForcefully calls rollback functions in reversed order
25
- RollbackForcefully ()
26
+ // Rollback calls rollback functions in reversed order
27
+ Rollback ()
26
28
27
- // Add adds given rollback functions
29
+ // Add adds given rollback functions, but skips if f == nil
28
30
Add (f func ())
29
31
}
30
32
@@ -35,29 +37,28 @@ func FuncGuard(name string) Guard {
35
37
36
38
type guard struct {
37
39
errMsg string
40
+ err error
38
41
rbFuncs []func ()
39
42
}
40
43
41
- func (g * guard ) Rollback (v interface {}) error {
42
- var err error
43
- if e , ok := v .(error ); ok {
44
- err = e
44
+ func (g * guard ) Error (v interface {}) error {
45
+ if err , ok := v .(error ); ok {
46
+ g .err = errors .Wrap (err , g .errMsg )
45
47
} else if v != nil {
46
- err = fmt .Errorf ("%s" , v )
47
- }
48
- if err != nil {
49
- g .RollbackForcefully ()
48
+ g .err = errors .Wrap (fmt .Errorf ("%s" , v ), g .errMsg )
50
49
}
51
- return errors . Wrap ( err , g . errMsg )
50
+ return g . err
52
51
}
53
52
54
- func (g * guard ) RollbackForcefully () {
53
+ func (g * guard ) Rollback () {
55
54
for i := len (g .rbFuncs ) - 1 ; i >= 0 ; i -- {
56
55
g .rbFuncs [i ]()
57
56
}
58
57
g .rbFuncs = nil // do not rollback twice
59
58
}
60
59
61
60
func (g * guard ) Add (f func ()) {
62
- g .rbFuncs = append (g .rbFuncs , f )
61
+ if f != nil {
62
+ g .rbFuncs = append (g .rbFuncs , f )
63
+ }
63
64
}
0 commit comments