summaryrefslogtreecommitdiff
path: root/buildscripts/idl
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2017-05-12 10:34:39 -0400
committerMark Benvenuto <mark.benvenuto@mongodb.com>2017-05-12 10:34:39 -0400
commit107b0bdf954bed554cf74a69a3fec268ac00886b (patch)
tree5d104e40d1c605b88a86d0ce77498cd372ed4414 /buildscripts/idl
parent164d4720b9d81ca5f9deea702b66438a6fa8072c (diff)
downloadmongo-107b0bdf954bed554cf74a69a3fec268ac00886b.tar.gz
SERVER-29081 Add toBSON to IDL generated classes
Diffstat (limited to 'buildscripts/idl')
-rw-r--r--buildscripts/idl/idl/generator.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/buildscripts/idl/idl/generator.py b/buildscripts/idl/idl/generator.py
index ef4e20e1ab0..b1008b287bd 100644
--- a/buildscripts/idl/idl/generator.py
+++ b/buildscripts/idl/idl/generator.py
@@ -248,6 +248,7 @@ class _CppHeaderFileWriter(_CppFileWriterBase):
'static %s parse(const IDLParserErrorContext& ctxt, const BSONObj& object);' %
(common.title_case(class_name)))
self._writer.write_line('void serialize(BSONObjBuilder* builder) const;')
+ self._writer.write_line('BSONObj toBSON() const;')
self._writer.write_empty_line()
def gen_protected_serializer_methods(self):
@@ -767,6 +768,20 @@ class _CppSourceFileWriter(_CppFileWriterBase):
# Add a blank line after each block
self._writer.write_empty_line()
+ def gen_to_bson_serializer_method(self, struct):
+ # type: (ast.Struct) -> None
+ """Generate the toBSON method definition."""
+ self._writer.write_line(
+ common.template_args(
+ """\
+ BSONObj ${class_name}::toBSON() const {
+ BSONObjBuilder builder;
+ serialize(&builder);
+ return builder.obj();
+ }
+ """,
+ class_name=common.title_case(struct.name)))
+
def gen_string_constants_definitions(self, struct):
# type: (ast.Struct) -> None
# pylint: disable=invalid-name
@@ -832,6 +847,10 @@ class _CppSourceFileWriter(_CppFileWriterBase):
self.gen_serializer_method(struct)
self.write_empty_line()
+ # Write toBSON
+ self.gen_to_bson_serializer_method(struct)
+ self.write_empty_line()
+
def _generate_header(spec, file_name):
# type: (ast.IDLAST, unicode) -> None