package filter

// Filter is an interface to filter
// rule: key => entries, all entries matched implies rule matched
type Filter interface {
	// add a rule
	AddRule(key interface{}, entities []interface{}, other interface{}) error
	// remove a rule
	RemoveRule(key interface{}) error
	// Match returns matched key
	Match(target interface{}) *MacthedResponse
}

// MacthedResponse represents matched response packet
type MacthedResponse struct {
	Entities []*MatchEntry
}

// MatchEntry represents macthed entry
type MatchEntry struct {
	Key   interface{}
	Other interface{}
}
