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 }