func OptionForceReadFilter(f bson.D) Option {
	return func(c *config) {
		c.forcedReadFilter = f
	}
}
OptionForceReadFilter allows to set a bson.D filter that
will always reducing the scope of the reads to that filter.
package manipmongo
import (
	"crypto/tls"
	"time"
	"github.com/globalsign/mgo/bson"
	"go.aporeto.io/elemental"
	"go.aporeto.io/manipulate"
)
type Option func(*config)
type config struct {
	username            string
	password            string
	authsource          string
	tlsConfig           *tls.Config
	poolLimit           int
	connectTimeout      time.Duration
	socketTimeout       time.Duration
	readConsistency     manipulate.ReadConsistency
	writeConsistency    manipulate.WriteConsistency
	sharder             Sharder
	defaultRetryFunc    manipulate.RetryFunc
	forcedReadFilter    bson.D
	attributeEncrypter  elemental.AttributeEncrypter
	explain             map[elemental.Identity]map[elemental.Operation]struct{}
	attributeSpecifiers map[elemental.Identity]elemental.AttributeSpecifiable
}
func newConfig() *config {
	return &config{
		poolLimit:        4096,
		connectTimeout:   10 * time.Second,
		socketTimeout:    60 * time.Second,
		readConsistency:  manipulate.ReadConsistencyDefault,
		writeConsistency: manipulate.WriteConsistencyDefault,
	}
}
func OptionCredentials(username, password, authsource string) Option {
	return func(c *config) {
		c.username = username
		c.password = password
		c.authsource = authsource
	}
}
func OptionTLS(tlsConfig *tls.Config) Option {
	return func(c *config) {
		c.tlsConfig = tlsConfig
	}
}
func OptionConnectionPoolLimit(poolLimit int) Option {
	return func(c *config) {
		c.poolLimit = poolLimit
	}
}
func OptionConnectionTimeout(connectTimeout time.Duration) Option {
	return func(c *config) {
		c.connectTimeout = connectTimeout
	}
}
func OptionSocketTimeout(socketTimeout time.Duration) Option {
	return func(c *config) {
		c.socketTimeout = socketTimeout
	}
}
func OptionDefaultReadConsistencyMode(consistency manipulate.ReadConsistency) Option {
	return func(c *config) {
		c.readConsistency = consistency
	}
}
func OptionDefaultWriteConsistencyMode(consistency manipulate.WriteConsistency) Option {
	return func(c *config) {
		c.writeConsistency = consistency
	}
}
func OptionSharder(sharder Sharder) Option {
	return func(c *config) {
		c.sharder = sharder
	}
}
func OptionDefaultRetryFunc(f manipulate.RetryFunc) Option {
	return func(c *config) {
		c.defaultRetryFunc = f
	}
}