From 4862c466277f6bebcfb41e563313ef94462d18c7 Mon Sep 17 00:00:00 2001 From: Dominic Evans Date: Sun, 27 Feb 2022 10:56:49 +0000 Subject: [PATCH] fix: reduce verbosity and whitespace of multierror 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. --- errors.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/errors.go b/errors.go index df796f910..048792d7e 100644 --- a/errors.go +++ b/errors.go @@ -3,6 +3,7 @@ package sarama import ( "errors" "fmt" + "strings" "github.com/hashicorp/go-multierror" ) @@ -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