code: def pbs_for_set_with_merge(document_path, document_data, merge):
      
      extractor = DocumentExtractorForMerge(document_data)
      extractor.apply_merge(merge)
  
      merge_empty = not document_data
  
      write_pbs = []
  
      if extractor.has_updates or merge_empty:
          write_pbs.append(
              extractor.get_update_pb(document_path, allow_empty_mask=merge_empty)
          )
  
      if extractor.transform_paths:
          transform_pb = extractor.get_transform_pb(document_path)
          write_pbs.append(transform_pb)
  
      return write_pbs
docs: Make ``Write`` protobufs for ``set()`` methods.
  
      Args:
          document_path (str): A fully-qualified document path.
          document_data (dict): Property names and values to use for
              replacing a document.
          merge (Optional[bool] or Optional[List<apispec>]):
              If True, merge all fields; else, merge only the named fields.
  
      Returns:
          List[google.cloud.firestore_v1beta1.types.Write]: One
          or two ``Write`` protobuf instances for ``set()``.