Skip to content

Commit 2d5a092

Browse files
committed
WrapNil
1 parent b879523 commit 2d5a092

2 files changed

Lines changed: 30 additions & 3 deletions

File tree

errors2.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,24 @@ func Wrap(err error, format string, args ...any) error {
3232
panic("wrapping nil error")
3333
}
3434

35-
return &wrap{
35+
return wrap{
3636
err: err,
3737
msg: fmt.Sprintf(format, args...),
3838
}
3939
}
4040

41-
func (w *wrap) Error() string {
41+
func WrapNil(err error, format string, args ...any) error {
42+
if err == nil {
43+
return nil
44+
}
45+
46+
return Wrap(err, format, args...)
47+
}
48+
49+
func (w wrap) Error() string {
4250
return fmt.Sprintf("%v: %v", w.msg, w.err)
4351
}
4452

45-
func (w *wrap) Unwrap() error {
53+
func (w wrap) Unwrap() error {
4654
return w.err
4755
}

errors2_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,25 @@ func TestErrors(tb *testing.T) {
8080

8181
_ = errors.Wrap(nil, "wrap nil")
8282
}()
83+
84+
if e1, e2 := errors.Wrap(err1, "wrap"), errors.Wrap(err1, "wrap"); e1 != e2 {
85+
tb.Errorf("expected the same result\n%v\n%v", e1, e2)
86+
}
87+
88+
if e1, e2 := errors.Wrap(err1, "wrap"), errors.WrapNil(err1, "wrap"); e1 != e2 {
89+
tb.Errorf("expected the same result\n%v\n%v", e1, e2)
90+
}
91+
92+
func() {
93+
defer func() {
94+
p := recover()
95+
if p != nil {
96+
tb.Errorf("panic: %v", p)
97+
}
98+
}()
99+
100+
_ = errors.WrapNil(nil, "wrap nil")
101+
}()
83102
}
84103

85104
func (e *testErr) Error() string { return fmt.Sprintf("testErr(%v)", e.val) }

0 commit comments

Comments
 (0)