required.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // Copyright 2016 Qiang Xue. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package validation
  5. import "errors"
  6. // Required is a validation rule that checks if a value is not empty.
  7. // A value is considered not empty if
  8. // - integer, float: not zero
  9. // - bool: true
  10. // - string, array, slice, map: len() > 0
  11. // - interface, pointer: not nil and the referenced value is not empty
  12. // - any other types
  13. var Required = &requiredRule{message: "cannot be blank", skipNil: false}
  14. // NilOrNotEmpty checks if a value is a nil pointer or a value that is not empty.
  15. // NilOrNotEmpty differs from Required in that it treats a nil pointer as valid.
  16. var NilOrNotEmpty = &requiredRule{message: "cannot be blank", skipNil: true}
  17. type requiredRule struct {
  18. message string
  19. skipNil bool
  20. }
  21. // Validate checks if the given value is valid or not.
  22. func (v *requiredRule) Validate(value interface{}) error {
  23. value, isNil := Indirect(value)
  24. if v.skipNil && !isNil && IsEmpty(value) || !v.skipNil && (isNil || IsEmpty(value)) {
  25. return errors.New(v.message)
  26. }
  27. return nil
  28. }
  29. // Error sets the error message for the rule.
  30. func (v *requiredRule) Error(message string) *requiredRule {
  31. return &requiredRule{
  32. message: message,
  33. skipNil: v.skipNil,
  34. }
  35. }