51 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
package mapstructure
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
	"fmt"
 | 
						|
	"sort"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
// Error implements the error interface and can represents multiple
 | 
						|
// errors that occur in the course of a single decode.
 | 
						|
type Error struct {
 | 
						|
	Errors []string
 | 
						|
}
 | 
						|
 | 
						|
func (e *Error) Error() string {
 | 
						|
	points := make([]string, len(e.Errors))
 | 
						|
	for i, err := range e.Errors {
 | 
						|
		points[i] = fmt.Sprintf("* %s", err)
 | 
						|
	}
 | 
						|
 | 
						|
	sort.Strings(points)
 | 
						|
	return fmt.Sprintf(
 | 
						|
		"%d error(s) decoding:\n\n%s",
 | 
						|
		len(e.Errors), strings.Join(points, "\n"))
 | 
						|
}
 | 
						|
 | 
						|
// WrappedErrors implements the errwrap.Wrapper interface to make this
 | 
						|
// return value more useful with the errwrap and go-multierror libraries.
 | 
						|
func (e *Error) WrappedErrors() []error {
 | 
						|
	if e == nil {
 | 
						|
		return nil
 | 
						|
	}
 | 
						|
 | 
						|
	result := make([]error, len(e.Errors))
 | 
						|
	for i, e := range e.Errors {
 | 
						|
		result[i] = errors.New(e)
 | 
						|
	}
 | 
						|
 | 
						|
	return result
 | 
						|
}
 | 
						|
 | 
						|
func appendErrors(errors []string, err error) []string {
 | 
						|
	switch e := err.(type) {
 | 
						|
	case *Error:
 | 
						|
		return append(errors, e.Errors...)
 | 
						|
	default:
 | 
						|
		return append(errors, e.Error())
 | 
						|
	}
 | 
						|
}
 |