public ResultSet get(long timeout) {
   CassandraMessage.Result result = resultFuture.get(timeout);
   ResultSet resultSet;
   switch (result.kind) {
     case ROWS:
       CassandraMessage.Result.Rows rows = (CassandraMessage.Result.Rows) result;
       RowMetadata metadata = null;
       if (statement instanceof PreparedStatement) {
         metadata = ((PreparedStatement) statement).getMetadata();
       }
       if (rows.metadata.columns != null) {
         metadata = new RowMetadata(rows.metadata.columns);
       }
       resultSet =
           new ResultSet(
               statement, metadata, rows.rows, rows.metadata.pagingState, result.getTracingId());
       break;
     default:
       resultSet = ResultSet.EMPTY_RESULT_SET;
       break;
   }
   return resultSet;
 }
 public Throwable cause() {
   return resultFuture.promise().cause();
 }
 public boolean isSuccess() {
   return resultFuture.promise().isSuccess();
 }