summaryrefslogtreecommitdiff
path: root/buildscripts/idl/idl/generator.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildscripts/idl/idl/generator.py')
-rw-r--r--buildscripts/idl/idl/generator.py43
1 files changed, 24 insertions, 19 deletions
diff --git a/buildscripts/idl/idl/generator.py b/buildscripts/idl/idl/generator.py
index 0fd4f74a49e..b896f7610fa 100644
--- a/buildscripts/idl/idl/generator.py
+++ b/buildscripts/idl/idl/generator.py
@@ -2169,21 +2169,24 @@ class _CppSourceFileWriter(_CppFileWriterBase):
self._writer.write_template(
'BSONArrayBuilder arrayBuilder(builder->subarrayStart(${field_name}));')
with self._block('for (const auto& item : ${access_member}) {', '}'):
- expression = bson_cpp_type.gen_serializer_expression(self._writer, 'item')
+ expression = bson_cpp_type.gen_serializer_expression(
+ self._writer, 'item',
+ field.query_shape == ast.QueryShapeFieldType.CUSTOM)
template_params['expression'] = expression
self._writer.write_template('arrayBuilder.append(${expression});')
else:
expression = bson_cpp_type.gen_serializer_expression(
- self._writer, _access_member(field))
+ self._writer, _access_member(field),
+ field.query_shape == ast.QueryShapeFieldType.CUSTOM)
template_params['expression'] = expression
- if not field.should_serialize_query_shape:
+ if not field.should_serialize_with_options:
self._writer.write_template(
'builder->append(${field_name}, ${expression});')
- elif field.query_shape_literal:
+ elif field.query_shape == ast.QueryShapeFieldType.LITERAL:
self._writer.write_template(
'options.serializeLiteralValue(${expression}).serializeForIDL(${field_name}, builder);'
)
- elif field.query_shape_anonymize:
+ elif field.query_shape == ast.QueryShapeFieldType.ANONYMIZE:
self._writer.write_template(
'builder->append(${field_name}, options.serializeFieldPathFromString(${expression}));'
)
@@ -2260,7 +2263,7 @@ class _CppSourceFileWriter(_CppFileWriterBase):
if field.chained:
# Just directly call the serializer for chained structs without opening up a nested
# document.
- if not field.should_serialize_query_shape:
+ if not field.should_serialize_with_options:
self._writer.write_template('${access_member}.serialize(builder);')
else:
self._writer.write_template('${access_member}.serialize(builder, options);')
@@ -2271,14 +2274,14 @@ class _CppSourceFileWriter(_CppFileWriterBase):
with self._block('for (const auto& item : ${access_member}) {', '}'):
self._writer.write_line(
'BSONObjBuilder subObjBuilder(arrayBuilder.subobjStart());')
- if not field.should_serialize_query_shape:
+ if not field.should_serialize_with_options:
self._writer.write_line('item.serialize(&subObjBuilder);')
else:
self._writer.write_line('item.serialize(&subObjBuilder, options);')
else:
self._writer.write_template(
'BSONObjBuilder subObjBuilder(builder->subobjStart(${field_name}));')
- if not field.should_serialize_query_shape:
+ if not field.should_serialize_with_options:
self._writer.write_template('${access_member}.serialize(&subObjBuilder);')
else:
self._writer.write_template(
@@ -2321,7 +2324,7 @@ class _CppSourceFileWriter(_CppFileWriterBase):
'cpp_type'] = 'std::vector<' + variant_type.cpp_type + '>' if variant_type.is_array else variant_type.cpp_type
template_params['param_opt'] = ""
- if field.should_serialize_query_shape:
+ if field.should_serialize_with_options:
template_params['param_opt'] = ', options'
with self._block('[%s${param_opt}](const ${cpp_type}& value) {' % builder, '},'):
bson_cpp_type = cpp_types.get_bson_cpp_type(variant_type)
@@ -2329,30 +2332,32 @@ class _CppSourceFileWriter(_CppFileWriterBase):
self._writer.write_template('value.serialize(%s);' % builder)
elif bson_cpp_type and bson_cpp_type.has_serializer():
assert not field.type.is_array
- expression = bson_cpp_type.gen_serializer_expression(self._writer, 'value')
+ expression = bson_cpp_type.gen_serializer_expression(
+ self._writer, 'value',
+ field.query_shape == ast.QueryShapeFieldType.CUSTOM)
template_params['expression'] = expression
- if not field.should_serialize_query_shape:
+ if not field.should_serialize_with_options:
self._writer.write_template(
'builder->append(${field_name}, ${expression});')
- elif field.query_shape_literal:
+ elif field.query_shape == ast.QueryShapeFieldType.LITERAL:
self._writer.write_template(
'options.serializeLiteralValue(${expression}).serializeForIDL(${field_name}, builder);'
)
- elif field.query_shape_anonymize:
+ elif field.query_shape == ast.QueryShapeFieldType.ANONYMIZE:
self._writer.write_template(
'builder->append(${field_name}, options.serializeFieldPathFromString(${expression}));'
)
else:
assert False
else:
- if not field.should_serialize_query_shape:
+ if not field.should_serialize_with_options:
self._writer.write_template(
'idl::idlSerialize(builder, ${field_name}, value);')
- elif field.query_shape_literal:
+ elif field.query_shape == ast.QueryShapeFieldType.LITERAL:
self._writer.write_template(
'options.serializeLiteralValue(value).serializeForIDL(${field_name}, builder);'
)
- elif field.query_shape_anonymize:
+ elif field.query_shape == ast.QueryShapeFieldType.ANONYMIZE:
self._writer.write_template(
'idl::idlSerialize(builder, ${field_name}, options.serializeFieldPathFromString(value));'
)
@@ -2391,15 +2396,15 @@ class _CppSourceFileWriter(_CppFileWriterBase):
else:
# Generate default serialization
# Note: BSONObjBuilder::append, which all three branches use, has overrides for std::vector also
- if not field.should_serialize_query_shape:
+ if not field.should_serialize_with_options:
self._writer.write_line(
'builder->append(%s, %s);' % (_get_field_constant_name(field),
_access_member(field)))
- elif field.query_shape_literal:
+ elif field.query_shape == ast.QueryShapeFieldType.LITERAL:
self._writer.write_line(
'options.serializeLiteralValue(%s).serializeForIDL(%s, builder);' %
(_access_member(field), _get_field_constant_name(field)))
- elif field.query_shape_anonymize:
+ elif field.query_shape == ast.QueryShapeFieldType.ANONYMIZE:
self._writer.write_line(
'builder->append(%s, options.serializeFieldPathFromString(%s));' %
(_get_field_constant_name(field), _access_member(field)))