conditional.go 942 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package rule
  2. import (
  3. "github.com/kataras/iris/v12/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. return c.claimPredicate()
  30. }
  31. // Valid validator
  32. func (c *conditionalRule) Valid(ctx *context.Context) bool {
  33. return c.validPredicate()
  34. }