diff options
Diffstat (limited to 'vendor/github.com/mitchellh/mapstructure/error.go')
-rw-r--r-- | vendor/github.com/mitchellh/mapstructure/error.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/vendor/github.com/mitchellh/mapstructure/error.go b/vendor/github.com/mitchellh/mapstructure/error.go new file mode 100644 index 0000000..47a99e5 --- /dev/null +++ b/vendor/github.com/mitchellh/mapstructure/error.go | |||
@@ -0,0 +1,50 @@ | |||
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 | } | ||