github.com/kubeshop/testkube@v1.17.23/pkg/slack/set.go (about)

     1  package slack
     2  
     3  import "github.com/kubeshop/testkube/pkg/api/v1/testkube"
     4  
     5  var exists = struct{}{}
     6  
     7  type set[S Storable] struct {
     8  	m map[S]struct{}
     9  }
    10  
    11  type Storable interface {
    12  	string | testkube.EventType
    13  }
    14  
    15  func NewSet[S Storable]() *set[S] {
    16  	s := &set[S]{}
    17  	s.m = make(map[S]struct{})
    18  	return s
    19  }
    20  
    21  func NewSetFromArray[S Storable](s []S) *set[S] {
    22  	set := NewSet[S]()
    23  	for _, v := range s {
    24  		set.Add(v)
    25  	}
    26  	return set
    27  }
    28  
    29  func (s *set[S]) Add(value S) {
    30  	s.m[value] = exists
    31  }
    32  
    33  func (s *set[S]) Remove(value S) {
    34  	delete(s.m, value)
    35  }
    36  
    37  func (s *set[S]) Contains(value S) bool {
    38  	_, c := s.m[value]
    39  	return c
    40  }
    41  
    42  func (s *set[S]) IsEmpty() bool {
    43  	return len(s.m) == 0
    44  }