Skip to content

Commit

Permalink
converted MultiError to just a slice
Browse files Browse the repository at this point in the history
  • Loading branch information
OneOfOne committed Sep 7, 2014
1 parent 2864d80 commit e8c3966
Showing 1 changed file with 14 additions and 13 deletions.
27 changes: 14 additions & 13 deletions errors/multierror.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,45 +11,46 @@ func (es ErrorString) Error() string {
return string(es)
}

type MultiError struct {
Errors []error
}
type MultiError []error

func (me *MultiError) Append(err interface{}) (added bool) {
tmp := *me
added = true
switch err := err.(type) {
case error:
me.Errors = append(me.Errors, err)
tmp = append(tmp, err)
case string:
me.Errors = append(me.Errors, ErrorString(err))
tmp = append(tmp, ErrorString(err))
case []byte:
me.Errors = append(me.Errors, ErrorString(err))
tmp = append(tmp, ErrorString(err))
case *MultiError:
me.Errors = append(me.Errors, err.Errors...)
tmp = append(tmp, (*err)...)
case MultiError:
me.Errors = append(me.Errors, err.Errors...)
tmp = append(tmp, err...)
case []error:
me.Errors = append(me.Errors, err...)
tmp = append(tmp, err...)
case nil:
added = false
default:
added = false
}
*me = tmp
return
}

func (me *MultiError) Len() int {
return len(me.Errors)
return len(*me)
}

func (me *MultiError) Error() string {
if len(me.Errors) == 1 {
return me.Errors[0].Error()
tmp := *me
if len(tmp) == 1 {
return tmp[0].Error()
}

buf := &bytes.Buffer{}
buf.WriteString("Multiple Errors Found:\n")
for i, e := range me.Errors {
for i, e := range tmp {
fmt.Fprintf(buf, "\t[%d] %s\n", i, e.Error())
}
return buf.String()[:buf.Len()-1] // skip the last \n
Expand Down

0 comments on commit e8c3966

Please sign in to comment.