code: def _options_protobuf(self, retry_id):
          
          if retry_id is not None:
              if self._read_only:
                  raise ValueError(_CANT_RETRY_READ_ONLY)
  
              return types.TransactionOptions(
                  read_write=types.TransactionOptions.ReadWrite(
                      retry_transaction=retry_id
                  )
              )
          elif self._read_only:
              return types.TransactionOptions(
                  read_only=types.TransactionOptions.ReadOnly()
              )
          else:
              return None
docs: Convert the current object to protobuf.
  
          The ``retry_id`` value is used when retrying a transaction that
          failed (e.g. due to contention). It is intended to be the "first"
          transaction that failed (i.e. if multiple retries are needed).
  
          Args:
              retry_id (Union[bytes, NoneType]): Transaction ID of a transaction
                  to be retried.
  
          Returns:
              Optional[google.cloud.firestore_v1beta1.types.TransactionOptions]:
              The protobuf ``TransactionOptions`` if ``read_only==True`` or if
              there is a transaction ID to be retried, else :data:`None`.
  
          Raises:
              ValueError: If ``retry_id`` is not :data:`None` but the
                  transaction is read-only.