parameters: (ctxt, idl_type, syntax_type)
docstring: Validate a chained type has both a deserializer and serializer.
docstring_summary: Validate a chained type has both a deserializer and serializer.
docstring_tokens: Validate a chained type has both a deserializer and serializer .
function: def _validate_chain_type_properties(ctxt, idl_type, syntax_type):
      # type: (errors.ParserContext, Union[syntax.Type, ast.Field], unicode) -> None
      """Validate a chained type has both a deserializer and serializer."""
      assert len(
          idl_type.bson_serialization_type) == 1 and idl_type.bson_serialization_type[0] == 'chain'
  
      if idl_type.deserializer is None:
          ctxt.add_missing_ast_required_field_error(idl_type, syntax_type, idl_type.name,
                                                    "deserializer")
  
      if idl_type.serializer is None:
          ctxt.add_missing_ast_required_field_error(idl_type, syntax_type, idl_type.name,
                                                    "serializer")
function_tokens: def _validate_chain_type_properties ( ctxt , idl_type , syntax_type ) : # type: (errors.ParserContext, Union[syntax.Type, ast.Field], unicode) -> None assert len ( idl_type . bson_serialization_type ) == 1 and idl_type . bson_serialization_type [ 0 ] == 'chain' if idl_type . deserializer is None : ctxt . add_missing_ast_required_field_error ( idl_type , syntax_type , idl_type . name , "deserializer" ) if idl_type . serializer is None : ctxt . add_missing_ast_required_field_error ( idl_type , syntax_type , idl_type . name , "serializer" )