{-# LANGUAGE DeriveDataTypeable #-}

module Database.Cassandra.Thrift.Cassandra_Client(get,get_slice,multiget,multiget_slice,get_count,get_key_range,get_range_slice,insert,batch_insert,remove,get_string_property,get_string_list_property,describe_keyspace) 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
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_key_range (ip,op) arg_keyspace arg_column_family arg_start arg_finish arg_count arg_consistency_level = do
  send_get_key_range op arg_keyspace arg_column_family arg_start arg_finish arg_count arg_consistency_level
  recv_get_key_range ip
send_get_key_range op arg_keyspace arg_column_family arg_start arg_finish arg_count arg_consistency_level = do
  seq <- seqid
  seqn <- readIORef seq
  writeMessageBegin op ("get_key_range", M_CALL, seqn)
  write_Get_key_range_args op (Get_key_range_args{f_Get_key_range_args_keyspace=Just arg_keyspace,f_Get_key_range_args_column_family=Just arg_column_family,f_Get_key_range_args_start=Just arg_start,f_Get_key_range_args_finish=Just arg_finish,f_Get_key_range_args_count=Just arg_count,f_Get_key_range_args_consistency_level=Just arg_consistency_level})
  writeMessageEnd op
  tFlush (getTransport op)
recv_get_key_range 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_key_range_result ip
  readMessageEnd ip
  case f_Get_key_range_result_success res of
    Just v -> return v
    Nothing -> do
      case f_Get_key_range_result_ire res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_key_range_result_ue res of
        Nothing -> return ()
        Just _v -> throw _v
      case f_Get_key_range_result_te res of
        Nothing -> return ()
        Just _v -> throw _v
      throw (AppExn AE_MISSING_RESULT "get_key_range 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")
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 ()
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_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")