code: def fields2parameters(self, fields, default_in="body"):
          
          parameters = []
          body_param = None
          for field_name, field_obj in iteritems(fields):
              if field_obj.dump_only:
                  continue
              param = self.field2parameter(
                  field_obj,
                  name=self._observed_name(field_obj, field_name),
                  default_in=default_in,
              )
              if (
                  self.openapi_version.major < 3
                  and param["in"] == "body"
                  and body_param is not None
              ):
                  body_param["schema"]["properties"].update(param["schema"]["properties"])
                  required_fields = param["schema"].get("required", [])
                  if required_fields:
                      body_param["schema"].setdefault("required", []).extend(
                          required_fields
                      )
              else:
                  if self.openapi_version.major < 3 and param["in"] == "body":
                      body_param = param
                  parameters.append(param)
          return parameters
docs: Return an array of OpenAPI parameters given a mapping between field names and
          :class:`Field <marshmallow.Field>` objects. If `default_in` is "body", then return an array
          of a single parameter; else return an array of a parameter for each included field in
          the :class:`Schema <marshmallow.Schema>`.
  
          In OpenAPI3, only "query", "header", "path" or "cookie" are allowed for the location
          of parameters. In OpenAPI 3, "requestBody" is used when fields are in the body.
  
          This function always returns a list, with a parameter
          for each included field in the :class:`Schema <marshmallow.Schema>`.
  
          https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#parameterObject