Chris Bannister 10 år sedan
förälder
incheckning
c422756e53
1 ändrade filer med 43 tillägg och 0 borttagningar
  1. 43 0
      filters.go

+ 43 - 0
filters.go

@@ -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()]
+	})
+}