aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/mwitkow/go-proto-validators/helper.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/mwitkow/go-proto-validators/helper.go')
-rw-r--r--vendor/github.com/mwitkow/go-proto-validators/helper.go39
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,
+ }
+}