diff options
Diffstat (limited to 'vendor/github.com/mwitkow/go-proto-validators/helper.go')
-rw-r--r-- | vendor/github.com/mwitkow/go-proto-validators/helper.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/vendor/github.com/mwitkow/go-proto-validators/helper.go b/vendor/github.com/mwitkow/go-proto-validators/helper.go new file mode 100644 index 0000000000..9a3ee9beb8 --- /dev/null +++ b/vendor/github.com/mwitkow/go-proto-validators/helper.go @@ -0,0 +1,39 @@ +// Copyright 2016 Michal Witkowski. All Rights Reserved. +// See LICENSE for licensing terms. + +package validator + +import "strings" + +// Validator is a general interface that allows a message to be validated. +type Validator interface { + Validate() error +} + +func CallValidatorIfExists(candidate interface{}) error { + if validator, ok := candidate.(Validator); ok { + return validator.Validate() + } + return nil +} + +type fieldError struct { + fieldStack []string + nestedErr error +} + +func (f *fieldError) Error() string { + return "invalid field " + strings.Join(f.fieldStack, ".") + ": " + f.nestedErr.Error() +} + +// FieldError wraps a given Validator error providing a message call stack. +func FieldError(fieldName string, err error) error { + if fErr, ok := err.(*fieldError); ok { + fErr.fieldStack = append([]string{fieldName}, fErr.fieldStack...) + return err + } + return &fieldError{ + fieldStack: []string{fieldName}, + nestedErr: err, + } +} |