docs: def save_metadata(self, metadata):
          """
          Save metadata to the store.
          """
          if metadata in (None, {}):
              return None
  
          if SYSTEM_METADATA in metadata:
              raise StoreException("Not allowed to store %r in metadata" % SYSTEM_METADATA)
  
          path = self.temporary_object_path(str(uuid.uuid4()))
  
          with open(path, 'w') as fd:
              try:
                  # IMPORTANT: JSON format affects the hash of the package.
                  # In particular, it cannot contain line breaks because of Windows (LF vs CRLF).
                  # To be safe, we use the most compact encoding.
                  json.dump(metadata, fd, sort_keys=True, separators=(',', ':'))
              except (TypeError, ValueError):
                  raise StoreException("Metadata is not serializable")
  
          metahash = digest_file(path)
          self._move_to_store(path, metahash)
          return metahash