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  }