gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

error.go (1029B)


      1 package mapstructure
      2 
      3 import (
      4 	"errors"
      5 	"fmt"
      6 	"sort"
      7 	"strings"
      8 )
      9 
     10 // Error implements the error interface and can represents multiple
     11 // errors that occur in the course of a single decode.
     12 type Error struct {
     13 	Errors []string
     14 }
     15 
     16 func (e *Error) Error() string {
     17 	points := make([]string, len(e.Errors))
     18 	for i, err := range e.Errors {
     19 		points[i] = fmt.Sprintf("* %s", err)
     20 	}
     21 
     22 	sort.Strings(points)
     23 	return fmt.Sprintf(
     24 		"%d error(s) decoding:\n\n%s",
     25 		len(e.Errors), strings.Join(points, "\n"))
     26 }
     27 
     28 // WrappedErrors implements the errwrap.Wrapper interface to make this
     29 // return value more useful with the errwrap and go-multierror libraries.
     30 func (e *Error) WrappedErrors() []error {
     31 	if e == nil {
     32 		return nil
     33 	}
     34 
     35 	result := make([]error, len(e.Errors))
     36 	for i, e := range e.Errors {
     37 		result[i] = errors.New(e)
     38 	}
     39 
     40 	return result
     41 }
     42 
     43 func appendErrors(errors []string, err error) []string {
     44 	switch e := err.(type) {
     45 	case *Error:
     46 		return append(errors, e.Errors...)
     47 	default:
     48 		return append(errors, e.Error())
     49 	}
     50 }