func WithMaxConnections(fn func(uint64) uint64) ServerOption {
	return func(cfg *serverConfig) error {
		cfg.maxConns = fn(cfg.maxConns)
		return nil
	}
}
WithMaxConnections configures the maximum number of connections to allow for
a given server. If max is 0, then the default will be math.MaxInt64.
package topology
import (
	"time"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/bson/bsoncodec"
	"go.mongodb.org/mongo-driver/event"
	"go.mongodb.org/mongo-driver/x/mongo/driver/session"
)
var defaultRegistry = bson.NewRegistryBuilder().Build()
type serverConfig struct {
	clock                     *session.ClusterClock
	compressionOpts           []string
	connectionOpts            []ConnectionOption
	appname                   string
	heartbeatInterval         time.Duration
	heartbeatTimeout          time.Duration
	maxConns                  uint64
	minConns                  uint64
	poolMonitor               *event.PoolMonitor
	serverMonitor             *event.ServerMonitor
	connectionPoolMaxIdleTime time.Duration
	registry                  *bsoncodec.Registry
	monitoringDisabled        bool
}
func newServerConfig(opts ...ServerOption) (*serverConfig, error) {
	cfg := &serverConfig{
		heartbeatInterval: 10 * time.Second,
		heartbeatTimeout:  10 * time.Second,
		maxConns:          100,
		registry:          defaultRegistry,
	}
	for _, opt := range opts {
		err := opt(cfg)
		if err != nil {
			return nil, err
		}
	}
	return cfg, nil
}
type ServerOption func(*serverConfig) error
func withMonitoringDisabled(fn func(bool) bool) ServerOption {
	return func(cfg *serverConfig) error {
		cfg.monitoringDisabled = fn(cfg.monitoringDisabled)
		return nil
	}
}
func WithConnectionOptions(fn func(...ConnectionOption) []ConnectionOption) ServerOption {
	return func(cfg *serverConfig) error {
		cfg.connectionOpts = fn(cfg.connectionOpts...)
		return nil
	}
}
func WithCompressionOptions(fn func(...string) []string) ServerOption {
	return func(cfg *serverConfig) error {
		cfg.compressionOpts = fn(cfg.compressionOpts...)
		return nil
	}
}
func WithServerAppName(fn func(string) string) ServerOption {
	return func(cfg *serverConfig) error {
		cfg.appname = fn(cfg.appname)
		return nil
	}
}
func WithHeartbeatInterval(fn func(time.Duration) time.Duration) ServerOption {
	return func(cfg *serverConfig) error {
		cfg.heartbeatInterval = fn(cfg.heartbeatInterval)
		return nil
	}
}
func WithHeartbeatTimeout(fn func(time.Duration) time.Duration) ServerOption {
	return func(cfg *serverConfig) error {
		cfg.heartbeatTimeout = fn(cfg.heartbeatTimeout)
		return nil
	}
}