func (c *ClientOptions) GetURI() string {
	return c.uri
}
GetURI returns the original URI used to configure the ClientOptions instance. If ApplyURI was not called during
construction, this returns "".
package options  
import (
	"bytes"
	"context"
	"crypto/tls"
	"crypto/x509"
	"encoding/pem"
	"errors"
	"fmt"
	"io/ioutil"
	"net"
	"strings"
	"time"
	"github.com/youmark/pkcs8"
	"go.mongodb.org/mongo-driver/bson/bsoncodec"
	"go.mongodb.org/mongo-driver/event"
	"go.mongodb.org/mongo-driver/mongo/readconcern"
	"go.mongodb.org/mongo-driver/mongo/readpref"
	"go.mongodb.org/mongo-driver/mongo/writeconcern"
	"go.mongodb.org/mongo-driver/tag"
	"go.mongodb.org/mongo-driver/x/mongo/driver"
	"go.mongodb.org/mongo-driver/x/mongo/driver/connstring"
	"go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage"
)
type ContextDialer interface {
	DialContext(ctx context.Context, network, address string) (net.Conn, error)
}
type Credential struct {
	AuthMechanism           string
	AuthMechanismProperties map[string]string
	AuthSource              string
	Username                string
	Password                string
	PasswordSet             bool
}
type ClientOptions struct {
	AppName                  *string
	Auth                     *Credential
	AutoEncryptionOptions    *AutoEncryptionOptions
	ConnectTimeout           *time.Duration
	Compressors              []string
	Dialer                   ContextDialer
	Direct                   *bool
	DisableOCSPEndpointCheck *bool
	HeartbeatInterval        *time.Duration
	Hosts                    []string
	LocalThreshold           *time.Duration
	MaxConnIdleTime          *time.Duration
	MaxPoolSize              *uint64
	MinPoolSize              *uint64
	PoolMonitor              *event.PoolMonitor
	Monitor                  *event.CommandMonitor
	ServerMonitor            *event.ServerMonitor
	ReadConcern              *readconcern.ReadConcern
	ReadPreference           *readpref.ReadPref
	Registry                 *bsoncodec.Registry
	ReplicaSet               *string
	RetryReads               *bool
	RetryWrites              *bool
	ServerSelectionTimeout   *time.Duration
	SocketTimeout            *time.Duration
	TLSConfig                *tls.Config
	WriteConcern             *writeconcern.WriteConcern
	ZlibLevel                *int
	ZstdLevel                *int
	err error
	uri string
	cs  *connstring.ConnString
	AuthenticateToAnything *bool
	Deployment driver.Deployment
}
func Client() *ClientOptions {
	return new(ClientOptions)
}
func (c *ClientOptions) Validate() error {
	c.validateAndSetError()
	return c.err
}
func (c *ClientOptions) validateAndSetError() {
	if c.err != nil {
		return
	}
	if c.Direct != nil && *c.Direct {
		if len(c.Hosts) > 1 {
			c.err = errors.New("a direct connection cannot be made if multiple hosts are specified")
			return
		}
		if c.cs != nil && c.cs.Scheme == connstring.SchemeMongoDBSRV {
			c.err = errors.New("a direct connection cannot be made if an SRV URI is used")
			return
		}
	}
}