github.com/ladydascalie/elvish@v0.0.0-20170703214355-2964dd3ece7f/util/errors.go (about) 1 package util 2 3 import "bytes" 4 5 // Errors pack multiple errors into one error. 6 type Errors struct { 7 Errors []error 8 } 9 10 func (es *Errors) Error() string { 11 switch len(es.Errors) { 12 case 0: 13 return "no error" 14 case 1: 15 return es.Errors[0].Error() 16 default: 17 var buf bytes.Buffer 18 buf.WriteString("multiple errors: ") 19 for i, e := range es.Errors { 20 if i > 0 { 21 buf.WriteString("; ") 22 } 23 buf.WriteString(e.Error()) 24 } 25 return buf.String() 26 } 27 } 28 29 func (es *Errors) Append(e error) { 30 es.Errors = append(es.Errors, e) 31 } 32 33 func CatError(err error, more error) error { 34 if err == nil { 35 return more 36 } 37 if more == nil { 38 return err 39 } 40 if es, ok := err.(*Errors); ok { 41 es.Append(more) 42 return es 43 } 44 return &Errors{[]error{err, more}} 45 }