code: def save_auxiliary_files(self, layer, destination):
          
  
          enable_busy_cursor()
  
          auxiliary_files = ['xml', 'json']
  
          for auxiliary_file in auxiliary_files:
              source_basename = os.path.splitext(layer.source())[0]
              source_file = "%s.%s" % (source_basename, auxiliary_file)
  
              destination_basename = os.path.splitext(destination)[0]
              destination_file = "%s.%s" % (destination_basename, auxiliary_file)
  
              # noinspection PyBroadException,PyBroadException
              try:
                  if os.path.isfile(source_file):
                      shutil.copy(source_file, destination_file)
  
              except (OSError, IOError):
                  display_critical_message_bar(
                      title=self.tr('Error while saving'),
                      message=self.tr(
                          'The destination location must be writable.'),
                      iface_object=self.iface
                  )
  
              except Exception:  # pylint: disable=broad-except
                  display_critical_message_bar(
                      title=self.tr('Error while saving'),
                      message=self.tr('Something went wrong.'),
                      iface_object=self.iface
                  )
  
          disable_busy_cursor()
docs: Save auxiliary files when using the 'save as' function.
  
          If some auxiliary files (.xml, .json) exist, this function will
          copy them when the 'save as' function is used on the layer.
  
          :param layer: The layer which has been saved as.
          :type layer: QgsMapLayer
  
          :param destination: The new filename of the layer.
          :type destination: str