summaryrefslogtreecommitdiff
path: root/src/mongo/db/write_concern_options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/write_concern_options.cpp')
-rw-r--r--src/mongo/db/write_concern_options.cpp31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/mongo/db/write_concern_options.cpp b/src/mongo/db/write_concern_options.cpp
index 055fa23a5ee..d92dbfed25c 100644
--- a/src/mongo/db/write_concern_options.cpp
+++ b/src/mongo/db/write_concern_options.cpp
@@ -159,20 +159,37 @@ Status WriteConcernOptions::parse(const BSONObj& obj) {
return Status::OK();
}
-WriteConcernOptions WriteConcernOptions::deserializerForIDL(const BSONObj& obj) {
- WriteConcernOptions writeConcernOptions;
- uassertStatusOK(writeConcernOptions.parse(obj));
- return writeConcernOptions;
-}
+namespace {
-StatusWith<WriteConcernOptions> WriteConcernOptions::extractWCFromCommand(
- const BSONObj& cmdObj, const WriteConcernOptions& defaultWC) {
+/**
+ * Construct a WriteConcernOptions based on an optional default WC object, in preparation for
+ * parsing out of a command object or IDL.
+ */
+WriteConcernOptions constructWCFromDefault(
+ const WriteConcernOptions& defaultWC = WriteConcernOptions()) {
WriteConcernOptions writeConcern = defaultWC;
writeConcern.usedDefault = true;
writeConcern.usedDefaultW = true;
if (writeConcern.wNumNodes == 0 && writeConcern.wMode.empty()) {
writeConcern.wNumNodes = 1;
}
+ return writeConcern;
+}
+
+} // namespace
+
+
+WriteConcernOptions WriteConcernOptions::deserializerForIDL(const BSONObj& obj) {
+ WriteConcernOptions writeConcern = constructWCFromDefault();
+ if (!obj.isEmpty()) {
+ uassertStatusOK(writeConcern.parse(obj));
+ }
+ return writeConcern;
+}
+
+StatusWith<WriteConcernOptions> WriteConcernOptions::extractWCFromCommand(
+ const BSONObj& cmdObj, const WriteConcernOptions& defaultWC) {
+ WriteConcernOptions writeConcern = constructWCFromDefault(defaultWC);
// Return the default write concern if no write concern is provided. We check for the existence
// of the write concern field up front in order to avoid the expense of constructing an error