@@ -160,62 +160,58 @@ func Client() *ClientOptions {
160160
161161// Validate validates the client options. This method will return the first error found.
162162func (c * ClientOptions ) Validate () error {
163- c .validateAndSetError ()
164- return c .err
165- }
166-
167- func (c * ClientOptions ) validateAndSetError () {
168163 if c .err != nil {
169- return
164+ return c . err
170165 }
166+ c .err = c .validate ()
167+ return c .err
168+ }
171169
170+ func (c * ClientOptions ) validate () error {
172171 // Direct connections cannot be made if multiple hosts are specified or an SRV URI is used.
173172 if c .Direct != nil && * c .Direct {
174173 if len (c .Hosts ) > 1 {
175- c .err = errors .New ("a direct connection cannot be made if multiple hosts are specified" )
176- return
174+ return errors .New ("a direct connection cannot be made if multiple hosts are specified" )
177175 }
178176 if c .cs != nil && c .cs .Scheme == connstring .SchemeMongoDBSRV {
179- c .err = errors .New ("a direct connection cannot be made if an SRV URI is used" )
180- return
177+ return errors .New ("a direct connection cannot be made if an SRV URI is used" )
181178 }
182179 }
183180
184181 if c .MaxPoolSize != nil && c .MinPoolSize != nil && * c .MaxPoolSize != 0 && * c .MinPoolSize > * c .MaxPoolSize {
185- c .err = fmt .Errorf ("minPoolSize must be less than or equal to maxPoolSize, got minPoolSize=%d maxPoolSize=%d" , * c .MinPoolSize , * c .MaxPoolSize )
186- return
182+ return fmt .Errorf ("minPoolSize must be less than or equal to maxPoolSize, got minPoolSize=%d maxPoolSize=%d" , * c .MinPoolSize , * c .MaxPoolSize )
187183 }
188184
189185 // verify server API version if ServerAPIOptions are passed in.
190186 if c .ServerAPIOptions != nil {
191- c .err = c .ServerAPIOptions .ServerAPIVersion .Validate ()
187+ if err := c .ServerAPIOptions .ServerAPIVersion .Validate (); err != nil {
188+ return err
189+ }
192190 }
193191
194192 // Validation for load-balanced mode.
195193 if c .LoadBalanced != nil && * c .LoadBalanced {
196194 if len (c .Hosts ) > 1 {
197- c .err = internal .ErrLoadBalancedWithMultipleHosts
198- return
195+ return internal .ErrLoadBalancedWithMultipleHosts
199196 }
200197 if c .ReplicaSet != nil {
201- c .err = internal .ErrLoadBalancedWithReplicaSet
202- return
198+ return internal .ErrLoadBalancedWithReplicaSet
203199 }
204200 if c .Direct != nil {
205- c .err = internal .ErrLoadBalancedWithDirectConnection
206- return
201+ return internal .ErrLoadBalancedWithDirectConnection
207202 }
208203 }
209204
210205 // Validation for srvMaxHosts.
211206 if c .SRVMaxHosts != nil && * c .SRVMaxHosts > 0 {
212207 if c .ReplicaSet != nil {
213- c . err = internal .ErrSRVMaxHostsWithReplicaSet
208+ return internal .ErrSRVMaxHostsWithReplicaSet
214209 }
215210 if c .LoadBalanced != nil && * c .LoadBalanced {
216- c . err = internal .ErrSRVMaxHostsWithLoadBalanced
211+ return internal .ErrSRVMaxHostsWithLoadBalanced
217212 }
218213 }
214+ return nil
219215}
220216
221217// GetURI returns the original URI used to configure the ClientOptions instance. If ApplyURI was not called during
0 commit comments