code: def set_iam_policy(self, policy, client=None):
          
          client = self._require_client(client)
          query_params = {}
  
          if self.user_project is not None:
              query_params["userProject"] = self.user_project
  
          resource = policy.to_api_repr()
          resource["resourceId"] = self.path
          info = client._connection.api_request(
              method="PUT",
              path="%s/iam" % (self.path,),
              query_params=query_params,
              data=resource,
              _target_object=None,
          )
          return Policy.from_api_repr(info)
docs: Update the IAM policy for the bucket.
  
          See
          https://cloud.google.com/storage/docs/json_api/v1/buckets/setIamPolicy
  
          If :attr:`user_project` is set, bills the API request to that project.
  
          :type policy: :class:`google.api_core.iam.Policy`
          :param policy: policy instance used to update bucket's IAM policy.
  
          :type client: :class:`~google.cloud.storage.client.Client` or
                        ``NoneType``
          :param client: Optional. The client to use.  If not passed, falls back
                         to the ``client`` stored on the current bucket.
  
          :rtype: :class:`google.api_core.iam.Policy`
          :returns: the policy instance, based on the resource returned from
                    the ``setIamPolicy`` API request.