diff options
Diffstat (limited to 'buildscripts/idl/idl/generator.py')
-rw-r--r-- | buildscripts/idl/idl/generator.py | 43 |
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))) |