{-# LANGUAGE DeriveDataTypeable #-}
module Database.Cassandra.Thrift.Cassandra_Client(login,get,get_slice,multiget,multiget_slice,get_count,get_range_slice,get_range_slices,insert,batch_insert,remove,batch_mutate,get_string_property,get_string_list_property,describe_keyspaces,describe_cluster_name,describe_version,describe_ring,describe_keyspace,describe_splits) where
import Data.IORef
import Thrift
import Data.Typeable ( Typeable )
import Control.Exception
import qualified Data.Map as Map
import qualified Data.Set as Set
import Data.Int
import Database.Cassandra.Thrift.Cassandra_Types
import Database.Cassandra.Thrift.Cassandra 
seqid = newIORef 0
login (ip,op) arg_keyspace arg_auth_request = do
  send_login op arg_keyspace arg_auth_request
  recv_login ip
send_login op arg_keyspace arg_auth_request = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("login", M_CALL, seqn)
  write_Login_args op (Login_args{f_Login_args_keyspace=Just arg_keyspace,f_Login_args_auth_request=Just arg_auth_request})
  writeMessageEnd op
  tFlush (getTransport op)
recv_login ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Login_result ip
  readMessageEnd ip
  case f_Login_result_authnx res of
    Nothing -> return ()
    Just _v -> throw _v
  case f_Login_result_authzx res of
    Nothing -> return ()
    Just _v -> throw _v
  return ()
get (ip,op) arg_keyspace arg_key arg_column_path arg_consistency_level = do
  send_get op arg_keyspace arg_key arg_column_path arg_consistency_level
  recv_get ip
send_get op arg_keyspace arg_key arg_column_path arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("get", M_CALL, seqn)
  write_Get_args op (Get_args{f_Get_args_keyspace=Just arg_keyspace,f_Get_args_key=Just arg_key,f_Get_args_column_path=Just arg_column_path,f_Get_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_get ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Get_result ip
  readMessageEnd ip
  case f_Get_result_success res of
    Just v -> return v
    Nothing -> do
      case f_Get_result_ire res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_result_nfe res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_result_ue res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_result_te res of
        Nothing -> return ()
        Just _v -> throw _v
      throw (AppExn AE_MISSING_RESULT "get failed: unknown result")
get_slice (ip,op) arg_keyspace arg_key arg_column_parent arg_predicate arg_consistency_level = do
  send_get_slice op arg_keyspace arg_key arg_column_parent arg_predicate arg_consistency_level
  recv_get_slice ip
send_get_slice op arg_keyspace arg_key arg_column_parent arg_predicate arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("get_slice", M_CALL, seqn)
  write_Get_slice_args op (Get_slice_args{f_Get_slice_args_keyspace=Just arg_keyspace,f_Get_slice_args_key=Just arg_key,f_Get_slice_args_column_parent=Just arg_column_parent,f_Get_slice_args_predicate=Just arg_predicate,f_Get_slice_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_get_slice ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Get_slice_result ip
  readMessageEnd ip
  case f_Get_slice_result_success res of
    Just v -> return v
    Nothing -> do
      case f_Get_slice_result_ire res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_slice_result_ue res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_slice_result_te res of
        Nothing -> return ()
        Just _v -> throw _v
      throw (AppExn AE_MISSING_RESULT "get_slice failed: unknown result")
multiget (ip,op) arg_keyspace arg_keys arg_column_path arg_consistency_level = do
  send_multiget op arg_keyspace arg_keys arg_column_path arg_consistency_level
  recv_multiget ip
send_multiget op arg_keyspace arg_keys arg_column_path arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("multiget", M_CALL, seqn)
  write_Multiget_args op (Multiget_args{f_Multiget_args_keyspace=Just arg_keyspace,f_Multiget_args_keys=Just arg_keys,f_Multiget_args_column_path=Just arg_column_path,f_Multiget_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_multiget ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Multiget_result ip
  readMessageEnd ip
  case f_Multiget_result_success res of
    Just v -> return v
    Nothing -> do
      case f_Multiget_result_ire res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Multiget_result_ue res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Multiget_result_te res of
        Nothing -> return ()
        Just _v -> throw _v
      throw (AppExn AE_MISSING_RESULT "multiget failed: unknown result")
multiget_slice (ip,op) arg_keyspace arg_keys arg_column_parent arg_predicate arg_consistency_level = do
  send_multiget_slice op arg_keyspace arg_keys arg_column_parent arg_predicate arg_consistency_level
  recv_multiget_slice ip
send_multiget_slice op arg_keyspace arg_keys arg_column_parent arg_predicate arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("multiget_slice", M_CALL, seqn)
  write_Multiget_slice_args op (Multiget_slice_args{f_Multiget_slice_args_keyspace=Just arg_keyspace,f_Multiget_slice_args_keys=Just arg_keys,f_Multiget_slice_args_column_parent=Just arg_column_parent,f_Multiget_slice_args_predicate=Just arg_predicate,f_Multiget_slice_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_multiget_slice ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Multiget_slice_result ip
  readMessageEnd ip
  case f_Multiget_slice_result_success res of
    Just v -> return v
    Nothing -> do
      case f_Multiget_slice_result_ire res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Multiget_slice_result_ue res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Multiget_slice_result_te res of
        Nothing -> return ()
        Just _v -> throw _v
      throw (AppExn AE_MISSING_RESULT "multiget_slice failed: unknown result")
get_count (ip,op) arg_keyspace arg_key arg_column_parent arg_consistency_level = do
  send_get_count op arg_keyspace arg_key arg_column_parent arg_consistency_level
  recv_get_count ip
send_get_count op arg_keyspace arg_key arg_column_parent arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("get_count", M_CALL, seqn)
  write_Get_count_args op (Get_count_args{f_Get_count_args_keyspace=Just arg_keyspace,f_Get_count_args_key=Just arg_key,f_Get_count_args_column_parent=Just arg_column_parent,f_Get_count_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_get_count ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Get_count_result ip
  readMessageEnd ip
  case f_Get_count_result_success res of
    Just v -> return v
    Nothing -> do
      case f_Get_count_result_ire res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_count_result_ue res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_count_result_te res of
        Nothing -> return ()
        Just _v -> throw _v
      throw (AppExn AE_MISSING_RESULT "get_count failed: unknown result")
get_range_slice (ip,op) arg_keyspace arg_column_parent arg_predicate arg_start_key arg_finish_key arg_row_count arg_consistency_level = do
  send_get_range_slice op arg_keyspace arg_column_parent arg_predicate arg_start_key arg_finish_key arg_row_count arg_consistency_level
  recv_get_range_slice ip
send_get_range_slice op arg_keyspace arg_column_parent arg_predicate arg_start_key arg_finish_key arg_row_count arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("get_range_slice", M_CALL, seqn)
  write_Get_range_slice_args op (Get_range_slice_args{f_Get_range_slice_args_keyspace=Just arg_keyspace,f_Get_range_slice_args_column_parent=Just arg_column_parent,f_Get_range_slice_args_predicate=Just arg_predicate,f_Get_range_slice_args_start_key=Just arg_start_key,f_Get_range_slice_args_finish_key=Just arg_finish_key,f_Get_range_slice_args_row_count=Just arg_row_count,f_Get_range_slice_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_get_range_slice ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Get_range_slice_result ip
  readMessageEnd ip
  case f_Get_range_slice_result_success res of
    Just v -> return v
    Nothing -> do
      case f_Get_range_slice_result_ire res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_range_slice_result_ue res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_range_slice_result_te res of
        Nothing -> return ()
        Just _v -> throw _v
      throw (AppExn AE_MISSING_RESULT "get_range_slice failed: unknown result")
get_range_slices (ip,op) arg_keyspace arg_column_parent arg_predicate arg_range arg_consistency_level = do
  send_get_range_slices op arg_keyspace arg_column_parent arg_predicate arg_range arg_consistency_level
  recv_get_range_slices ip
send_get_range_slices op arg_keyspace arg_column_parent arg_predicate arg_range arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("get_range_slices", M_CALL, seqn)
  write_Get_range_slices_args op (Get_range_slices_args{f_Get_range_slices_args_keyspace=Just arg_keyspace,f_Get_range_slices_args_column_parent=Just arg_column_parent,f_Get_range_slices_args_predicate=Just arg_predicate,f_Get_range_slices_args_range=Just arg_range,f_Get_range_slices_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_get_range_slices ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Get_range_slices_result ip
  readMessageEnd ip
  case f_Get_range_slices_result_success res of
    Just v -> return v
    Nothing -> do
      case f_Get_range_slices_result_ire res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_range_slices_result_ue res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_range_slices_result_te res of
        Nothing -> return ()
        Just _v -> throw _v
      throw (AppExn AE_MISSING_RESULT "get_range_slices failed: unknown result")
insert (ip,op) arg_keyspace arg_key arg_column_path arg_value arg_timestamp arg_consistency_level = do
  send_insert op arg_keyspace arg_key arg_column_path arg_value arg_timestamp arg_consistency_level
  recv_insert ip
send_insert op arg_keyspace arg_key arg_column_path arg_value arg_timestamp arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("insert", M_CALL, seqn)
  write_Insert_args op (Insert_args{f_Insert_args_keyspace=Just arg_keyspace,f_Insert_args_key=Just arg_key,f_Insert_args_column_path=Just arg_column_path,f_Insert_args_value=Just arg_value,f_Insert_args_timestamp=Just arg_timestamp,f_Insert_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_insert ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Insert_result ip
  readMessageEnd ip
  case f_Insert_result_ire res of
    Nothing -> return ()
    Just _v -> throw _v
  case f_Insert_result_ue res of
    Nothing -> return ()
    Just _v -> throw _v
  case f_Insert_result_te res of
    Nothing -> return ()
    Just _v -> throw _v
  return ()
batch_insert (ip,op) arg_keyspace arg_key arg_cfmap arg_consistency_level = do
  send_batch_insert op arg_keyspace arg_key arg_cfmap arg_consistency_level
  recv_batch_insert ip
send_batch_insert op arg_keyspace arg_key arg_cfmap arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("batch_insert", M_CALL, seqn)
  write_Batch_insert_args op (Batch_insert_args{f_Batch_insert_args_keyspace=Just arg_keyspace,f_Batch_insert_args_key=Just arg_key,f_Batch_insert_args_cfmap=Just arg_cfmap,f_Batch_insert_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_batch_insert ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Batch_insert_result ip
  readMessageEnd ip
  case f_Batch_insert_result_ire res of
    Nothing -> return ()
    Just _v -> throw _v
  case f_Batch_insert_result_ue res of
    Nothing -> return ()
    Just _v -> throw _v
  case f_Batch_insert_result_te res of
    Nothing -> return ()
    Just _v -> throw _v
  return ()
remove (ip,op) arg_keyspace arg_key arg_column_path arg_timestamp arg_consistency_level = do
  send_remove op arg_keyspace arg_key arg_column_path arg_timestamp arg_consistency_level
  recv_remove ip
send_remove op arg_keyspace arg_key arg_column_path arg_timestamp arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("remove", M_CALL, seqn)
  write_Remove_args op (Remove_args{f_Remove_args_keyspace=Just arg_keyspace,f_Remove_args_key=Just arg_key,f_Remove_args_column_path=Just arg_column_path,f_Remove_args_timestamp=Just arg_timestamp,f_Remove_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_remove ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Remove_result ip
  readMessageEnd ip
  case f_Remove_result_ire res of
    Nothing -> return ()
    Just _v -> throw _v
  case f_Remove_result_ue res of
    Nothing -> return ()
    Just _v -> throw _v
  case f_Remove_result_te res of
    Nothing -> return ()
    Just _v -> throw _v
  return ()
batch_mutate (ip,op) arg_keyspace arg_mutation_map arg_consistency_level = do
  send_batch_mutate op arg_keyspace arg_mutation_map arg_consistency_level
  recv_batch_mutate ip
send_batch_mutate op arg_keyspace arg_mutation_map arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("batch_mutate", M_CALL, seqn)
  write_Batch_mutate_args op (Batch_mutate_args{f_Batch_mutate_args_keyspace=Just arg_keyspace,f_Batch_mutate_args_mutation_map=Just arg_mutation_map,f_Batch_mutate_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_batch_mutate ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Batch_mutate_result ip
  readMessageEnd ip
  case f_Batch_mutate_result_ire res of
    Nothing -> return ()
    Just _v -> throw _v
  case f_Batch_mutate_result_ue res of
    Nothing -> return ()
    Just _v -> throw _v
  case f_Batch_mutate_result_te res of
    Nothing -> return ()
    Just _v -> throw _v
  return ()
get_string_property (ip,op) arg_property = do
  send_get_string_property op arg_property
  recv_get_string_property ip
send_get_string_property op arg_property = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("get_string_property", M_CALL, seqn)
  write_Get_string_property_args op (Get_string_property_args{f_Get_string_property_args_property=Just arg_property})
  writeMessageEnd op
  tFlush (getTransport op)
recv_get_string_property ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Get_string_property_result ip
  readMessageEnd ip
  case f_Get_string_property_result_success res of
    Just v -> return v
    Nothing -> do
      throw (AppExn AE_MISSING_RESULT "get_string_property failed: unknown result")
get_string_list_property (ip,op) arg_property = do
  send_get_string_list_property op arg_property
  recv_get_string_list_property ip
send_get_string_list_property op arg_property = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("get_string_list_property", M_CALL, seqn)
  write_Get_string_list_property_args op (Get_string_list_property_args{f_Get_string_list_property_args_property=Just arg_property})
  writeMessageEnd op
  tFlush (getTransport op)
recv_get_string_list_property ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Get_string_list_property_result ip
  readMessageEnd ip
  case f_Get_string_list_property_result_success res of
    Just v -> return v
    Nothing -> do
      throw (AppExn AE_MISSING_RESULT "get_string_list_property failed: unknown result")
describe_keyspaces (ip,op) = do
  send_describe_keyspaces op
  recv_describe_keyspaces ip
send_describe_keyspaces op = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("describe_keyspaces", M_CALL, seqn)
  write_Describe_keyspaces_args op (Describe_keyspaces_args{})
  writeMessageEnd op
  tFlush (getTransport op)
recv_describe_keyspaces ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Describe_keyspaces_result ip
  readMessageEnd ip
  case f_Describe_keyspaces_result_success res of
    Just v -> return v
    Nothing -> do
      throw (AppExn AE_MISSING_RESULT "describe_keyspaces failed: unknown result")
describe_cluster_name (ip,op) = do
  send_describe_cluster_name op
  recv_describe_cluster_name ip
send_describe_cluster_name op = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("describe_cluster_name", M_CALL, seqn)
  write_Describe_cluster_name_args op (Describe_cluster_name_args{})
  writeMessageEnd op
  tFlush (getTransport op)
recv_describe_cluster_name ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Describe_cluster_name_result ip
  readMessageEnd ip
  case f_Describe_cluster_name_result_success res of
    Just v -> return v
    Nothing -> do
      throw (AppExn AE_MISSING_RESULT "describe_cluster_name failed: unknown result")
describe_version (ip,op) = do
  send_describe_version op
  recv_describe_version ip
send_describe_version op = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("describe_version", M_CALL, seqn)
  write_Describe_version_args op (Describe_version_args{})
  writeMessageEnd op
  tFlush (getTransport op)
recv_describe_version ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Describe_version_result ip
  readMessageEnd ip
  case f_Describe_version_result_success res of
    Just v -> return v
    Nothing -> do
      throw (AppExn AE_MISSING_RESULT "describe_version failed: unknown result")
describe_ring (ip,op) arg_keyspace = do
  send_describe_ring op arg_keyspace
  recv_describe_ring ip
send_describe_ring op arg_keyspace = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("describe_ring", M_CALL, seqn)
  write_Describe_ring_args op (Describe_ring_args{f_Describe_ring_args_keyspace=Just arg_keyspace})
  writeMessageEnd op
  tFlush (getTransport op)
recv_describe_ring ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Describe_ring_result ip
  readMessageEnd ip
  case f_Describe_ring_result_success res of
    Just v -> return v
    Nothing -> do
      case f_Describe_ring_result_ire res of
        Nothing -> return ()
        Just _v -> throw _v
      throw (AppExn AE_MISSING_RESULT "describe_ring failed: unknown result")
describe_keyspace (ip,op) arg_keyspace = do
  send_describe_keyspace op arg_keyspace
  recv_describe_keyspace ip
send_describe_keyspace op arg_keyspace = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("describe_keyspace", M_CALL, seqn)
  write_Describe_keyspace_args op (Describe_keyspace_args{f_Describe_keyspace_args_keyspace=Just arg_keyspace})
  writeMessageEnd op
  tFlush (getTransport op)
recv_describe_keyspace ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Describe_keyspace_result ip
  readMessageEnd ip
  case f_Describe_keyspace_result_success res of
    Just v -> return v
    Nothing -> do
      case f_Describe_keyspace_result_nfe res of
        Nothing -> return ()
        Just _v -> throw _v
      throw (AppExn AE_MISSING_RESULT "describe_keyspace failed: unknown result")
describe_splits (ip,op) arg_start_token arg_end_token arg_keys_per_split = do
  send_describe_splits op arg_start_token arg_end_token arg_keys_per_split
  recv_describe_splits ip
send_describe_splits op arg_start_token arg_end_token arg_keys_per_split = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("describe_splits", M_CALL, seqn)
  write_Describe_splits_args op (Describe_splits_args{f_Describe_splits_args_start_token=Just arg_start_token,f_Describe_splits_args_end_token=Just arg_end_token,f_Describe_splits_args_keys_per_split=Just arg_keys_per_split})
  writeMessageEnd op
  tFlush (getTransport op)
recv_describe_splits ip = do
  (fname, mtype, rseqid) <- readMessageBegin ip
  if mtype == M_EXCEPTION then do
    x <- readAppExn ip
    readMessageEnd ip
    throw x
    else return ()
  res <- read_Describe_splits_result ip
  readMessageEnd ip
  case f_Describe_splits_result_success res of
    Just v -> return v
    Nothing -> do
      throw (AppExn AE_MISSING_RESULT "describe_splits failed: unknown result")