| 123456789101112131415161718192021222324252627282930313233343536373839 | 
							- package predicate
 
- type Predicate func() bool
 
- func (v Predicate) And(predicate Predicate) Predicate {
 
- 	return All(v, predicate)
 
- }
 
- func (v Predicate) Or(predicate Predicate) Predicate {
 
- 	return Any(v, predicate)
 
- }
 
- func All(predicates ...Predicate) Predicate {
 
- 	return func() bool {
 
- 		for _, p := range predicates {
 
- 			if !p() {
 
- 				return false
 
- 			}
 
- 		}
 
- 		return true
 
- 	}
 
- }
 
- func Any(predicates ...Predicate) Predicate {
 
- 	return func() bool {
 
- 		for _, p := range predicates {
 
- 			if p() {
 
- 				return true
 
- 			}
 
- 		}
 
- 		return false
 
- 	}
 
- }
 
- func Not(predicate Predicate) Predicate {
 
- 	return func() bool {
 
- 		return !predicate()
 
- 	}
 
- }
 
 
  |