Skip to content

Commit

Permalink
fix: reduce verbosity and whitespace of multierror
Browse files Browse the repository at this point in the history
Add a customised default implementation of the multierror format func
that is less verbose for single error multierrors (return them without
the unnecessary "1 error occured:" prefix) and also condenses the output
by removing one of the newline separators from between multiple errors
in the output.
  • Loading branch information
dnwe committed Feb 27, 2022
1 parent f1fd15e commit f436782
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 4 deletions.
20 changes: 18 additions & 2 deletions errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package sarama
import (
"errors"
"fmt"
"strings"

"github.com/hashicorp/go-multierror"
)
Expand Down Expand Up @@ -63,8 +64,23 @@ var ErrReassignPartitions = errors.New("failed to reassign partitions for topic"
// ErrDeleteRecords is the type of error returned when fail to delete the required records
var ErrDeleteRecords = errors.New("kafka server: failed to delete records")

// The formatter used to format multierrors
var MultiErrorFormat multierror.ErrorFormatFunc
// MultiErrorFormat specifies the formatter applied to format multierrors. The
// default implementation is a consensed version of the hashicorp/go-multierror
// default one
var MultiErrorFormat multierror.ErrorFormatFunc = func(es []error) string {
if len(es) == 1 {
return es[0].Error()
}

points := make([]string, len(es))
for i, err := range es {
points[i] = fmt.Sprintf("* %s", err)
}

return fmt.Sprintf(
"%d errors occurred:\n\t%s\n",
len(es), strings.Join(points, "\n\t"))
}

type sentinelError struct {
sentinel error
Expand Down
4 changes: 2 additions & 2 deletions errors_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import (
"testing"
)

func TestSentinelWithWrappedError(t *testing.T) {
func TestSentinelWithSingleWrappedError(t *testing.T) {
t.Parallel()
myNetError := &net.OpError{Op: "mock", Err: errors.New("op error")}
error := Wrap(ErrOutOfBrokers, myNetError)

expected := fmt.Sprintf("%s: 1 error occurred:\n\t* %s\n\n", ErrOutOfBrokers, myNetError)
expected := fmt.Sprintf("%s: %s", ErrOutOfBrokers, myNetError)
actual := error.Error()
if actual != expected {
t.Errorf("unexpected value '%s' vs '%v'", expected, actual)
Expand Down

0 comments on commit f436782

Please sign in to comment.