Skip to content

Commit

Permalink
add filters
Browse files Browse the repository at this point in the history
  • Loading branch information
Zariel committed Dec 25, 2015
1 parent 29b95e8 commit c422756
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions filters.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package gocql

// HostFilter interface is used when a host is discovered via server sent events.
type HostFilter interface {
// Called when a new host is discovered, returning true will cause the host
// to be added to the pools.
Accept(host *HostInfo) bool
}

// HostFilterFunc converts a func(host HostInfo) bool into a HostFilter
type HostFilterFunc func(host *HostInfo) bool

func (fn HostFilterFunc) Accept(host *HostInfo) bool {
return fn(host)
}

// AcceptAllFilter will accept all hosts
func AcceptAllFilterfunc() HostFilter {
return HostFilterFunc(func(host *HostInfo) bool {
return true
})
}

// DataCentreHostFilter filters all hosts such that they are in the same data centre
// as the supplied data centre.
func DataCentreHostFilter(dataCentre string) HostFilter {
return HostFilterFunc(func(host *HostInfo) bool {
return host.DataCenter() == dataCentre
})
}

// WhiteListHostFilter filters incoming hosts by checking that their address is
// in the initial hosts whitelist.
func WhiteListHostFilter(hosts ...string) HostFilter {
m := make(map[string]bool, len(hosts))
for _, host := range hosts {
m[host] = true
}

return HostFilterFunc(func(host *HostInfo) bool {
return m[host.Peer()]
})
}

0 comments on commit c422756

Please sign in to comment.