diff options
author | Benety Goh <benety@mongodb.com> | 2021-04-09 11:13:41 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-04-09 16:00:16 +0000 |
commit | eff94d95aeb52906cb8066159606e1e0f0f81565 (patch) | |
tree | eda4bb935a620bf91c4f08971699b3d5681310d2 | |
parent | 0e967d6ed33cdf9eb8314e6ae3fb3e2261e213d7 (diff) | |
download | mongo-eff94d95aeb52906cb8066159606e1e0f0f81565.tar.gz |
SERVER-55960 always pass field name to IDL serializer
-rw-r--r-- | buildscripts/idl/idl/generator.py | 9 | ||||
-rw-r--r-- | src/mongo/idl/basic_types.h | 6 |
2 files changed, 10 insertions, 5 deletions
diff --git a/buildscripts/idl/idl/generator.py b/buildscripts/idl/idl/generator.py index 833004213d4..34747fd6d24 100644 --- a/buildscripts/idl/idl/generator.py +++ b/buildscripts/idl/idl/generator.py @@ -1980,7 +1980,11 @@ class _CppSourceFileWriter(_CppFileWriterBase): method_name = writer.get_method_name(field.type.serializer) template_params['method_name'] = method_name - if field.type.is_array: + if field.chained: + # Just directly call the serializer for chained structs without opening up a + # nested document. + self._writer.write_template('${access_member}.${method_name}(builder);') + elif field.type.is_array: self._writer.write_template( 'BSONArrayBuilder arrayBuilder(builder->subarrayStart(${field_name}));') with self._block('for (const auto& item : ${access_member}) {', '}'): @@ -1988,7 +1992,8 @@ class _CppSourceFileWriter(_CppFileWriterBase): 'BSONObjBuilder subObjBuilder(arrayBuilder.subobjStart());') self._writer.write_template('item.${method_name}(&subObjBuilder);') else: - self._writer.write_template('${access_member}.${method_name}(builder);') + self._writer.write_template( + '${access_member}.${method_name}(${field_name}, builder);') def _gen_serializer_method_struct(self, field): # type: (ast.Field) -> None diff --git a/src/mongo/idl/basic_types.h b/src/mongo/idl/basic_types.h index 35516add195..c02366d3c5f 100644 --- a/src/mongo/idl/basic_types.h +++ b/src/mongo/idl/basic_types.h @@ -172,14 +172,14 @@ public: uasserted(ErrorCodes::FailedToParse, "w has to be a number or string"); } - void serializeWriteConcernW(BSONObjBuilder* builder) const { + void serializeWriteConcernW(StringData fieldName, BSONObjBuilder* builder) const { if (auto stringVal = stdx::get_if<std::string>(&_w)) { - builder->append("w", *stringVal); + builder->append(fieldName, *stringVal); return; } auto intVal = stdx::get_if<std::int64_t>(&_w); invariant(intVal); - builder->appendNumber("w", static_cast<long long>(*intVal)); + builder->appendNumber(fieldName, static_cast<long long>(*intVal)); } WriteConcernW() : _w{1}, _usedDefault{true} {}; |