or.go 489 B

123456789101112131415161718192021222324252627282930313233343536
  1. package filter
  2. import (
  3. "fmt"
  4. )
  5. // Or is a set of filters that should be evaluated as a logical
  6. // OR.
  7. type Or[T any] struct {
  8. Filters []Filter[T]
  9. }
  10. func (o Or[T]) String() string {
  11. s := "(or"
  12. for _, f := range o.Filters {
  13. s += fmt.Sprintf(" %s", f)
  14. }
  15. s += ")"
  16. return s
  17. }
  18. func (o Or[T]) Matches(that T) bool {
  19. filters := o.Filters
  20. if len(filters) == 0 {
  21. return true
  22. }
  23. for _, filter := range filters {
  24. if filter.Matches(that) {
  25. return true
  26. }
  27. }
  28. return false
  29. }