predicate.go 626 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package predicate
  2. type Predicate func() bool
  3. func (v Predicate) And(predicate Predicate) Predicate {
  4. return All(v, predicate)
  5. }
  6. func (v Predicate) Or(predicate Predicate) Predicate {
  7. return Any(v, predicate)
  8. }
  9. func All(predicates ...Predicate) Predicate {
  10. return func() bool {
  11. for _, p := range predicates {
  12. if !p() {
  13. return false
  14. }
  15. }
  16. return true
  17. }
  18. }
  19. func Any(predicates ...Predicate) Predicate {
  20. return func() bool {
  21. for _, p := range predicates {
  22. if p() {
  23. return true
  24. }
  25. }
  26. return false
  27. }
  28. }
  29. func Not(predicate Predicate) Predicate {
  30. return func() bool {
  31. return !predicate()
  32. }
  33. }