conditional.go 996 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package rule
  2. import (
  3. "github.com/kataras/iris/context"
  4. )
  5. // Conditional is a Rule witch adds a predicate in order to its methods to execute
  6. type conditionalRule struct {
  7. claimPredicate func() bool
  8. validPredicate func() bool
  9. }
  10. var emptyConditionalPredicate = func() bool {
  11. return true
  12. }
  13. var _ Rule = &conditionalRule{}
  14. // Conditional returns a new rule witch has conditionals
  15. func Conditional(claimPredicate func() bool, validPredicate func() bool) Rule {
  16. if claimPredicate == nil {
  17. claimPredicate = emptyConditionalPredicate
  18. }
  19. if validPredicate == nil {
  20. validPredicate = emptyConditionalPredicate
  21. }
  22. return &conditionalRule{
  23. claimPredicate: claimPredicate,
  24. validPredicate: validPredicate,
  25. }
  26. }
  27. // Claim validator
  28. func (c *conditionalRule) Claim(ctx context.Context) bool {
  29. if !c.claimPredicate() {
  30. return false
  31. }
  32. return true
  33. }
  34. // Valid validator
  35. func (c *conditionalRule) Valid(ctx context.Context) bool {
  36. if !c.validPredicate() {
  37. return false
  38. }
  39. return true
  40. }