| // Copyright (C) MongoDB, Inc. 2017-present. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); you may |
| // not use this file except in compliance with the License. You may obtain |
| // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 |
| |
| package options |
| |
| import ( |
| "github.com/mongodb/mongo-go-driver/bson/bsoncodec" |
| "github.com/mongodb/mongo-go-driver/mongo/readconcern" |
| "github.com/mongodb/mongo-go-driver/mongo/readpref" |
| "github.com/mongodb/mongo-go-driver/mongo/writeconcern" |
| ) |
| |
| // DatabaseOptions represent all possible options to configure a Database. |
| type DatabaseOptions struct { |
| ReadConcern *readconcern.ReadConcern // The read concern for operations in the database. |
| WriteConcern *writeconcern.WriteConcern // The write concern for operations in the database. |
| ReadPreference *readpref.ReadPref // The read preference for operations in the database. |
| Registry *bsoncodec.Registry // The registry to be used to construct BSON encoders and decoders for the database. |
| } |
| |
| // Database creates a new DatabaseOptions instance |
| func Database() *DatabaseOptions { |
| return &DatabaseOptions{} |
| } |
| |
| // SetReadConcern sets the read concern for the database. |
| func (d *DatabaseOptions) SetReadConcern(rc *readconcern.ReadConcern) *DatabaseOptions { |
| d.ReadConcern = rc |
| return d |
| } |
| |
| // SetWriteConcern sets the write concern for the database. |
| func (d *DatabaseOptions) SetWriteConcern(wc *writeconcern.WriteConcern) *DatabaseOptions { |
| d.WriteConcern = wc |
| return d |
| } |
| |
| // SetReadPreference sets the read preference for the database. |
| func (d *DatabaseOptions) SetReadPreference(rp *readpref.ReadPref) *DatabaseOptions { |
| d.ReadPreference = rp |
| return d |
| } |
| |
| // SetRegistry sets the bsoncodec Registry for the database. |
| func (d *DatabaseOptions) SetRegistry(r *bsoncodec.Registry) *DatabaseOptions { |
| d.Registry = r |
| return d |
| } |
| |
| // MergeDatabaseOptions combines the *DatabaseOptions arguments into a single *DatabaseOptions in a last one wins |
| // fashion. |
| func MergeDatabaseOptions(opts ...*DatabaseOptions) *DatabaseOptions { |
| d := Database() |
| |
| for _, opt := range opts { |
| if opt == nil { |
| continue |
| } |
| if opt.ReadConcern != nil { |
| d.ReadConcern = opt.ReadConcern |
| } |
| if opt.WriteConcern != nil { |
| d.WriteConcern = opt.WriteConcern |
| } |
| if opt.ReadPreference != nil { |
| d.ReadPreference = opt.ReadPreference |
| } |
| if opt.Registry != nil { |
| d.Registry = opt.Registry |
| } |
| } |
| |
| return d |
| } |