|
- // 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
-
- // InsertOneOptions represents all possible options to the InsertOne() function.
- type InsertOneOptions struct {
- BypassDocumentValidation *bool // If true, allows the write to opt-out of document level validation
- }
-
- // InsertOne returns a pointer to a new InsertOneOptions
- func InsertOne() *InsertOneOptions {
- return &InsertOneOptions{}
- }
-
- // SetBypassDocumentValidation allows the write to opt-out of document level validation.
- // Valid for server versions >= 3.2. For servers < 3.2, this option is ignored.
- func (ioo *InsertOneOptions) SetBypassDocumentValidation(b bool) *InsertOneOptions {
- ioo.BypassDocumentValidation = &b
- return ioo
- }
-
- // MergeInsertOneOptions combines the argued InsertOneOptions into a single InsertOneOptions in a last-one-wins fashion
- func MergeInsertOneOptions(opts ...*InsertOneOptions) *InsertOneOptions {
- ioOpts := InsertOne()
- for _, ioo := range opts {
- if ioo == nil {
- continue
- }
- if ioo.BypassDocumentValidation != nil {
- ioOpts.BypassDocumentValidation = ioo.BypassDocumentValidation
- }
- }
-
- return ioOpts
- }
-
- // InsertManyOptions represents all possible options to the InsertMany() function.
- type InsertManyOptions struct {
- BypassDocumentValidation *bool // If true, allows the write to opt-out of document level validation
- Ordered *bool // If true, when an insert fails, return without performing the remaining inserts. Defaults to true.
- }
-
- // InsertMany returns a pointer to a new InsertManyOptions
- func InsertMany() *InsertManyOptions {
- return &InsertManyOptions{
- Ordered: &DefaultOrdered,
- }
- }
-
- // SetBypassDocumentValidation allows the write to opt-out of document level validation.
- // Valid for server versions >= 3.2. For servers < 3.2, this option is ignored.
- func (imo *InsertManyOptions) SetBypassDocumentValidation(b bool) *InsertManyOptions {
- imo.BypassDocumentValidation = &b
- return imo
- }
-
- // SetOrdered configures the ordered option. If true, when a write fails, the function will return without attempting
- // remaining writes. Defaults to true.
- func (imo *InsertManyOptions) SetOrdered(b bool) *InsertManyOptions {
- imo.Ordered = &b
- return imo
- }
-
- // MergeInsertManyOptions combines the argued InsertManyOptions into a single InsertManyOptions in a last-one-wins fashion
- func MergeInsertManyOptions(opts ...*InsertManyOptions) *InsertManyOptions {
- imOpts := InsertMany()
- for _, imo := range opts {
- if imo == nil {
- continue
- }
- if imo.BypassDocumentValidation != nil {
- imOpts.BypassDocumentValidation = imo.BypassDocumentValidation
- }
- if imo.Ordered != nil {
- imOpts.Ordered = imo.Ordered
- }
- }
-
- return imOpts
- }
|