Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.0 KiB
50 lines
1.0 KiB
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()) |
|
} |
|
}
|
|
|