github.com/arieschain/arieschain@v0.0.0-20191023063405-37c074544356/event/filter/generic_filter.go (about) 1 package filter 2 3 type Generic struct { 4 Str1, Str2, Str3 string 5 Data map[string]struct{} 6 7 Fn func(data interface{}) 8 } 9 10 // self = registered, f = incoming 11 func (self Generic) Compare(f Filter) bool { 12 var strMatch, dataMatch = true, true 13 14 filter := f.(Generic) 15 if (len(self.Str1) > 0 && filter.Str1 != self.Str1) || 16 (len(self.Str2) > 0 && filter.Str2 != self.Str2) || 17 (len(self.Str3) > 0 && filter.Str3 != self.Str3) { 18 strMatch = false 19 } 20 21 for k := range self.Data { 22 if _, ok := filter.Data[k]; !ok { 23 return false 24 } 25 } 26 27 return strMatch && dataMatch 28 } 29 30 func (self Generic) Trigger(data interface{}) { 31 self.Fn(data) 32 }