Skip to content

Commit 2afb31f

Browse files
authored
Merge pull request #28 from foomo/feature/remove-multierr
feat: remove multierr in favor of types
2 parents 9c2736d + 5b4f551 commit 2afb31f

File tree

11 files changed

+49
-57
lines changed

11 files changed

+49
-57
lines changed

.github/workflows/pull-requests.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ jobs:
2525
- uses: actions/checkout@v3
2626
- uses: actions/setup-go@v4
2727
with:
28-
cache: true
2928
check-latest: true
3029
go-version-file: 'go.mod'
3130
- name: Run go mod tidy

.github/workflows/releases.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ jobs:
2424
- run: git fetch --force --tags
2525
- uses: actions/setup-go@v4
2626
with:
27-
cache: true
2827
check-latest: true
2928
go-version-file: 'go.mod'
3029
- uses: goreleaser/goreleaser-action@v4

.golangci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ linters:
4040
#- contextcheck # check the function whether to use a non-inherited context [fast: false, auto-fix: false]
4141
#- cyclop # checks function and package cyclomatic complexity [fast: false, auto-fix: false]
4242
- decorder # check declaration order and count of types, constants, variables and functions [fast: true, auto-fix: false]
43-
- depguard # Go linter that checks if package imports are in a list of acceptable packages [fast: true, auto-fix: false]
43+
#- depguard # Go linter that checks if package imports are in a list of acceptable packages [fast: true, auto-fix: false]
4444
- dogsled # Checks assignments with too many blank identifiers (e.g. x, _, _, _, := f()) [fast: true, auto-fix: false]
4545
#- dupl # Tool for code clone detection [fast: true, auto-fix: false]
4646
- durationcheck # check for two durations multiplied together [fast: false, auto-fix: false]

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
.PHONY: gomod
66
## Run go mod tidy
7-
gomod:
7+
tidy:
88
go mod tidy
99

1010
.PHONY: outdated

error.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,29 @@ import (
77
"github.com/foomo/fender/config"
88
"github.com/foomo/fender/fend"
99
"github.com/foomo/fender/rule"
10-
"go.uber.org/multierr"
1110
)
1211

1312
type Error struct {
14-
cause error
13+
FendErrs []*fend.Error
1514
}
1615

17-
func NewError(cause error) *Error {
16+
func NewError(fendErrs ...*fend.Error) *Error {
1817
return &Error{
19-
cause: cause,
18+
FendErrs: fendErrs,
2019
}
2120
}
2221

23-
func NewFendError(name string, cause error) *Error {
24-
return NewError(fend.NewError(name, cause))
22+
func NewFendError(name string, ruleErrs ...*rule.Error) *Error {
23+
return NewError(fend.NewError(name, ruleErrs...))
2524
}
2625

2726
func NewFendRuleError(name string, ruleName rule.Name, ruleMeta ...string) *Error {
2827
return NewFendError(name, rule.NewError(ruleName, ruleMeta...))
2928
}
3029

3130
func (e *Error) Error() string {
32-
errs := multierr.Errors(e.cause)
33-
causes := make([]string, len(errs))
34-
for i, cause := range errs {
31+
causes := make([]string, len(e.FendErrs))
32+
for i, cause := range e.FendErrs {
3533
causes[i] = cause.Error()
3634
}
3735
return strings.Join(causes, config.DelimiterFend)
@@ -45,12 +43,16 @@ func (e *Error) First() error {
4543
}
4644

4745
func (e *Error) Errors() []error {
48-
return multierr.Errors(e.cause)
46+
causes := make([]error, len(e.FendErrs))
47+
for i, fendErr := range e.FendErrs {
48+
causes[i] = fendErr
49+
}
50+
return causes
4951
}
5052

51-
func (e *Error) Unwrap() error {
52-
return e.cause
53-
}
53+
// func (e *Error) Unwrap() error {
54+
// return e.cause
55+
// }
5456

5557
func AsError(err error) *Error {
5658
var fendErr *Error

fend/error.go

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,52 +6,54 @@ import (
66

77
"github.com/foomo/fender/config"
88
"github.com/foomo/fender/rule"
9-
"go.uber.org/multierr"
109
)
1110

1211
type Error struct {
13-
name string
14-
cause error
12+
Path string
13+
RuleErrs []*rule.Error
1514
}
1615

17-
func NewError(name string, cause error) *Error {
16+
func NewError(path string, ruleErrs ...*rule.Error) *Error {
1817
return &Error{
19-
name: name,
20-
cause: cause,
18+
Path: path,
19+
RuleErrs: ruleErrs,
2120
}
2221
}
2322

24-
func NewRuleError(name string, ruleName rule.Name, meta ...string) *Error {
23+
func NewRuleError(path string, ruleName rule.Name, meta ...string) *Error {
2524
return &Error{
26-
name: name,
27-
cause: rule.NewError(ruleName, meta...),
25+
Path: path,
26+
RuleErrs: []*rule.Error{rule.NewError(ruleName, meta...)},
2827
}
2928
}
3029

3130
func (e *Error) Name() string {
32-
return e.name
31+
return e.Path
3332
}
3433

3534
func (e *Error) Error() string {
3635
var ret string
37-
errs := multierr.Errors(e.cause)
38-
causes := make([]string, len(errs))
39-
for i, cause := range errs {
40-
causes[i] = cause.Error()
36+
causes := make([]string, len(e.RuleErrs))
37+
for i, ruleErr := range e.RuleErrs {
38+
causes[i] = ruleErr.Error()
4139
}
42-
if e.name != "" {
43-
ret += e.name + config.DelimiterFendName
40+
if e.Path != "" {
41+
ret += e.Path + config.DelimiterFendName
4442
}
4543
return ret + strings.Join(causes, config.DelimiterRule)
4644
}
4745

4846
func (e *Error) Errors() []error {
49-
return multierr.Errors(e.cause)
47+
causes := make([]error, len(e.RuleErrs))
48+
for i, ruleErr := range e.RuleErrs {
49+
causes[i] = ruleErr
50+
}
51+
return causes
5052
}
5153

52-
func (e *Error) Unwrap() error {
53-
return e.cause
54-
}
54+
// func (e *Error) Unwrap() error {
55+
// return e.rule
56+
// }
5557

5658
func AsError(err error) *Error {
5759
var fendErr *Error

fend/fend.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,18 @@ import (
55
"errors"
66

77
"github.com/foomo/fender/rule"
8-
"go.uber.org/multierr"
98
)
109

1110
type Fend func(ctx context.Context, mode Mode) error
1211

1312
func fend[T any](ctx context.Context, mode Mode, meta string, value T, rules ...rule.Rule[T]) error {
14-
var causes error
13+
var causes []*rule.Error
1514
for _, r := range rules {
1615
err := r(ctx, value)
1716
if errors.Is(err, rule.ErrBreak) {
1817
break
1918
} else if e, ok := err.(*rule.Error); ok { //nolint:errorlint
20-
causes = multierr.Append(causes, e)
19+
causes = append(causes, e)
2120
// break if we only want the first error
2221
if mode == ModeFirst {
2322
break
@@ -27,19 +26,19 @@ func fend[T any](ctx context.Context, mode Mode, meta string, value T, rules ...
2726
}
2827
}
2928
if causes != nil {
30-
return NewError(meta, causes)
29+
return NewError(meta, causes...)
3130
}
3231
return nil
3332
}
3433

3534
func fendDynamic(ctx context.Context, mode Mode, meta string, rules ...rule.DynamicRule) error {
36-
var causes error
35+
var causes []*rule.Error
3736
for _, r := range rules {
3837
err := r(ctx)
3938
if errors.Is(err, rule.ErrBreak) {
4039
break
4140
} else if e, ok := err.(*rule.Error); ok { //nolint:errorlint
42-
causes = multierr.Append(causes, e)
41+
causes = append(causes, e)
4342
// break if we only want the first error
4443
if mode == ModeFirst {
4544
break
@@ -49,7 +48,7 @@ func fendDynamic(ctx context.Context, mode Mode, meta string, rules ...rule.Dyna
4948
}
5049
}
5150
if causes != nil {
52-
return NewError(meta, causes)
51+
return NewError(meta, causes...)
5352
}
5453
return nil
5554
}

fend/union.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55

66
"github.com/foomo/fender/rule"
7-
"go.uber.org/multierr"
87
)
98

109
func Union[T any](rules ...Rules[T]) rule.Rule[T] {
@@ -14,7 +13,7 @@ func Union[T any](rules ...Rules[T]) rule.Rule[T] {
1413
var e2 error
1514
for _, r2 := range r {
1615
if err := r2(ctx, v); err != nil {
17-
e2 = multierr.Append(e2, err)
16+
e2 = err
1817
}
1918
}
2019
if e2 != nil {

fender.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55

66
"github.com/foomo/fender/fend"
7-
"go.uber.org/multierr"
87
)
98

109
func All(ctx context.Context, fends ...fend.Fend) error {
@@ -20,12 +19,12 @@ func AllFirst(ctx context.Context, fends ...fend.Fend) error {
2019
}
2120

2221
func Mode(ctx context.Context, mode fend.Mode, fends ...fend.Fend) error {
23-
var cause error
22+
var cause []*fend.Error
2423
for _, validator := range fends {
2524
err := validator(ctx, mode)
2625
if e, ok := err.(*fend.Error); ok { //nolint:errorlint
2726
// append error
28-
cause = multierr.Append(cause, e)
27+
cause = append(cause, e)
2928
// break if we only want the first errors
3029
if mode == fend.ModeFirst || mode == fend.ModeAllFirst {
3130
break
@@ -35,7 +34,7 @@ func Mode(ctx context.Context, mode fend.Mode, fends ...fend.Fend) error {
3534
}
3635
}
3736
if cause != nil {
38-
return NewError(cause)
37+
return NewError(cause...)
3938
}
4039
return nil
4140
}

go.mod

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ go 1.20
55
require (
66
github.com/go-playground/validator/v10 v10.12.0
77
github.com/stretchr/testify v1.8.2
8-
go.uber.org/multierr v1.9.0
98
golang.org/x/exp v0.0.0-20230307190834-24139beb5833
109
)
1110

@@ -15,7 +14,6 @@ require (
1514
github.com/go-playground/universal-translator v0.18.1 // indirect
1615
github.com/leodido/go-urn v1.2.2 // indirect
1716
github.com/pmezard/go-difflib v1.0.0 // indirect
18-
go.uber.org/atomic v1.7.0 // indirect
1917
golang.org/x/crypto v0.7.0 // indirect
2018
golang.org/x/sys v0.6.0 // indirect
2119
golang.org/x/text v0.8.0 // indirect

0 commit comments

Comments
 (0)