code: def copy2(src, dst, metadata=None, retry_params=None):
    
    common.validate_file_path(src)
    common.validate_file_path(dst)
  
    if metadata is None:
      metadata = {}
      copy_meta = 'COPY'
    else:
      copy_meta = 'REPLACE'
    metadata.update({'x-goog-copy-source': src,
                     'x-goog-metadata-directive': copy_meta})
  
    api = storage_api._get_storage_api(retry_params=retry_params)
    status, resp_headers, content = api.put_object(
        api_utils._quote_filename(dst), headers=metadata)
    errors.check_status(status, [200], src, metadata, resp_headers, body=content)
docs: Copy the file content from src to dst.
  
    Args:
      src: /bucket/filename
      dst: /bucket/filename
      metadata: a dict of metadata for this copy. If None, old metadata is copied.
        For example, {'x-goog-meta-foo': 'bar'}.
      retry_params: An api_utils.RetryParams for this call to GCS. If None,
        the default one is used.
  
    Raises:
      errors.AuthorizationError: if authorization failed.
      errors.NotFoundError: if an object that's expected to exist doesn't.