{-# LANGUAGE DeriveDataTypeable #-}
{-# OPTIONS_GHC -fno-warn-missing-fields #-}
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-----------------------------------------------------------------
-- Autogenerated by Thrift                                     --
--                                                             --
-- DO NOT EDIT UNLESS YOU ARE SURE YOU KNOW WHAT YOU ARE DOING --
-----------------------------------------------------------------

module Database.Cassandra.Thrift.Cassandra_Types where
import Thrift
import Data.Typeable ( Typeable )
import Control.Exception
import qualified Data.Map as Map
import qualified Data.Set as Set
import Data.ByteString.Lazy
import Data.Int
import Data.Word
import Prelude ((==), String, Eq, Show, Ord, Maybe(..), (&&), (||), return, IO, Enum, fromIntegral, fromEnum, toEnum, Bool(..), (++), ($), Double, (-), length)
data ConsistencyLevel = ONE|QUORUM|LOCAL_QUORUM|EACH_QUORUM|ALL|ANY|TWO|THREE  deriving (Show,Eq, Typeable, Ord)
instance Enum ConsistencyLevel where
  fromEnum t = case t of
    ONE -> 1
    QUORUM -> 2
    LOCAL_QUORUM -> 3
    EACH_QUORUM -> 4
    ALL -> 5
    ANY -> 6
    TWO -> 7
    THREE -> 8
  toEnum t = case t of
    1 -> ONE
    2 -> QUORUM
    3 -> LOCAL_QUORUM
    4 -> EACH_QUORUM
    5 -> ALL
    6 -> ANY
    7 -> TWO
    8 -> THREE
    _ -> throw ThriftException
data IndexOperator = EQ|GTE|GT|LTE|LT  deriving (Show,Eq, Typeable, Ord)
instance Enum IndexOperator where
  fromEnum t = case t of
    EQ -> 0
    GTE -> 1
    GT -> 2
    LTE -> 3
    LT -> 4
  toEnum t = case t of
    0 -> EQ
    1 -> GTE
    2 -> GT
    3 -> LTE
    4 -> LT
    _ -> throw ThriftException
data IndexType = KEYS  deriving (Show,Eq, Typeable, Ord)
instance Enum IndexType where
  fromEnum t = case t of
    KEYS -> 0
  toEnum t = case t of
    0 -> KEYS
    _ -> throw ThriftException
data Column = Column{f_Column_name :: Maybe ByteString,f_Column_value :: Maybe ByteString,f_Column_timestamp :: Maybe Int64,f_Column_ttl :: Maybe Int32} deriving (Show,Eq,Ord,Typeable)
write_Column oprot record = do
  writeStructBegin oprot "Column"
  case f_Column_name record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("name",T_STRING,1)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_Column_value record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("value",T_STRING,2)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_Column_timestamp record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("timestamp",T_I64,3)
    writeI64 oprot _v
    writeFieldEnd oprot}
  case f_Column_ttl record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("ttl",T_I32,4)
    writeI32 oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_Column_fields iprot record = do
  (_,_t3,_id4) <- readFieldBegin iprot
  if _t3 == T_STOP then return record else
    case _id4 of 
      1 -> if _t3 == T_STRING then do
        s <- readBinary iprot
        read_Column_fields iprot record{f_Column_name=Just s}
        else do
          skip iprot _t3
          read_Column_fields iprot record
      2 -> if _t3 == T_STRING then do
        s <- readBinary iprot
        read_Column_fields iprot record{f_Column_value=Just s}
        else do
          skip iprot _t3
          read_Column_fields iprot record
      3 -> if _t3 == T_I64 then do
        s <- readI64 iprot
        read_Column_fields iprot record{f_Column_timestamp=Just s}
        else do
          skip iprot _t3
          read_Column_fields iprot record
      4 -> if _t3 == T_I32 then do
        s <- readI32 iprot
        read_Column_fields iprot record{f_Column_ttl=Just s}
        else do
          skip iprot _t3
          read_Column_fields iprot record
      _ -> do
        skip iprot _t3
        readFieldEnd iprot
        read_Column_fields iprot record
read_Column iprot = do
  _ <- readStructBegin iprot
  record <- read_Column_fields iprot (Column{f_Column_name=Nothing,f_Column_value=Nothing,f_Column_timestamp=Nothing,f_Column_ttl=Nothing})
  readStructEnd iprot
  return record
data SuperColumn = SuperColumn{f_SuperColumn_name :: Maybe ByteString,f_SuperColumn_columns :: Maybe [Column]} deriving (Show,Eq,Ord,Typeable)
write_SuperColumn oprot record = do
  writeStructBegin oprot "SuperColumn"
  case f_SuperColumn_name record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("name",T_STRING,1)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_SuperColumn_columns record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("columns",T_LIST,2)
    (let {f [] = return (); f (_viter7:t) = do {write_Column oprot _viter7;f t}} in do {writeListBegin oprot (T_STRUCT,fromIntegral $ Prelude.length _v); f _v;writeListEnd oprot})
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_SuperColumn_fields iprot record = do
  (_,_t9,_id10) <- readFieldBegin iprot
  if _t9 == T_STOP then return record else
    case _id10 of 
      1 -> if _t9 == T_STRING then do
        s <- readBinary iprot
        read_SuperColumn_fields iprot record{f_SuperColumn_name=Just s}
        else do
          skip iprot _t9
          read_SuperColumn_fields iprot record
      2 -> if _t9 == T_LIST then do
        s <- (let {f 0 = return []; f n = do {v <- (read_Column iprot);r <- f (n-1); return $ v:r}} in do {(_etype14,_size11) <- readListBegin iprot; f _size11})
        read_SuperColumn_fields iprot record{f_SuperColumn_columns=Just s}
        else do
          skip iprot _t9
          read_SuperColumn_fields iprot record
      _ -> do
        skip iprot _t9
        readFieldEnd iprot
        read_SuperColumn_fields iprot record
read_SuperColumn iprot = do
  _ <- readStructBegin iprot
  record <- read_SuperColumn_fields iprot (SuperColumn{f_SuperColumn_name=Nothing,f_SuperColumn_columns=Nothing})
  readStructEnd iprot
  return record
data ColumnOrSuperColumn = ColumnOrSuperColumn{f_ColumnOrSuperColumn_column :: Maybe Column,f_ColumnOrSuperColumn_super_column :: Maybe SuperColumn} deriving (Show,Eq,Ord,Typeable)
write_ColumnOrSuperColumn oprot record = do
  writeStructBegin oprot "ColumnOrSuperColumn"
  case f_ColumnOrSuperColumn_column record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("column",T_STRUCT,1)
    write_Column oprot _v
    writeFieldEnd oprot}
  case f_ColumnOrSuperColumn_super_column record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("super_column",T_STRUCT,2)
    write_SuperColumn oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_ColumnOrSuperColumn_fields iprot record = do
  (_,_t19,_id20) <- readFieldBegin iprot
  if _t19 == T_STOP then return record else
    case _id20 of 
      1 -> if _t19 == T_STRUCT then do
        s <- (read_Column iprot)
        read_ColumnOrSuperColumn_fields iprot record{f_ColumnOrSuperColumn_column=Just s}
        else do
          skip iprot _t19
          read_ColumnOrSuperColumn_fields iprot record
      2 -> if _t19 == T_STRUCT then do
        s <- (read_SuperColumn iprot)
        read_ColumnOrSuperColumn_fields iprot record{f_ColumnOrSuperColumn_super_column=Just s}
        else do
          skip iprot _t19
          read_ColumnOrSuperColumn_fields iprot record
      _ -> do
        skip iprot _t19
        readFieldEnd iprot
        read_ColumnOrSuperColumn_fields iprot record
read_ColumnOrSuperColumn iprot = do
  _ <- readStructBegin iprot
  record <- read_ColumnOrSuperColumn_fields iprot (ColumnOrSuperColumn{f_ColumnOrSuperColumn_column=Nothing,f_ColumnOrSuperColumn_super_column=Nothing})
  readStructEnd iprot
  return record
data NotFoundException = NotFoundException deriving (Show,Eq,Ord,Typeable)
instance Exception NotFoundException
write_NotFoundException oprot record = do
  writeStructBegin oprot "NotFoundException"
  writeFieldStop oprot
  writeStructEnd oprot
read_NotFoundException_fields iprot record = do
  (_,_t24,_id25) <- readFieldBegin iprot
  if _t24 == T_STOP then return record else
    case _id25 of 
      _ -> do
        skip iprot _t24
        readFieldEnd iprot
        read_NotFoundException_fields iprot record
read_NotFoundException iprot = do
  _ <- readStructBegin iprot
  record <- read_NotFoundException_fields iprot (NotFoundException{})
  readStructEnd iprot
  return record
data InvalidRequestException = InvalidRequestException{f_InvalidRequestException_why :: Maybe String} deriving (Show,Eq,Ord,Typeable)
instance Exception InvalidRequestException
write_InvalidRequestException oprot record = do
  writeStructBegin oprot "InvalidRequestException"
  case f_InvalidRequestException_why record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("why",T_STRING,1)
    writeString oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_InvalidRequestException_fields iprot record = do
  (_,_t29,_id30) <- readFieldBegin iprot
  if _t29 == T_STOP then return record else
    case _id30 of 
      1 -> if _t29 == T_STRING then do
        s <- readString iprot
        read_InvalidRequestException_fields iprot record{f_InvalidRequestException_why=Just s}
        else do
          skip iprot _t29
          read_InvalidRequestException_fields iprot record
      _ -> do
        skip iprot _t29
        readFieldEnd iprot
        read_InvalidRequestException_fields iprot record
read_InvalidRequestException iprot = do
  _ <- readStructBegin iprot
  record <- read_InvalidRequestException_fields iprot (InvalidRequestException{f_InvalidRequestException_why=Nothing})
  readStructEnd iprot
  return record
data UnavailableException = UnavailableException deriving (Show,Eq,Ord,Typeable)
instance Exception UnavailableException
write_UnavailableException oprot record = do
  writeStructBegin oprot "UnavailableException"
  writeFieldStop oprot
  writeStructEnd oprot
read_UnavailableException_fields iprot record = do
  (_,_t34,_id35) <- readFieldBegin iprot
  if _t34 == T_STOP then return record else
    case _id35 of 
      _ -> do
        skip iprot _t34
        readFieldEnd iprot
        read_UnavailableException_fields iprot record
read_UnavailableException iprot = do
  _ <- readStructBegin iprot
  record <- read_UnavailableException_fields iprot (UnavailableException{})
  readStructEnd iprot
  return record
data TimedOutException = TimedOutException deriving (Show,Eq,Ord,Typeable)
instance Exception TimedOutException
write_TimedOutException oprot record = do
  writeStructBegin oprot "TimedOutException"
  writeFieldStop oprot
  writeStructEnd oprot
read_TimedOutException_fields iprot record = do
  (_,_t39,_id40) <- readFieldBegin iprot
  if _t39 == T_STOP then return record else
    case _id40 of 
      _ -> do
        skip iprot _t39
        readFieldEnd iprot
        read_TimedOutException_fields iprot record
read_TimedOutException iprot = do
  _ <- readStructBegin iprot
  record <- read_TimedOutException_fields iprot (TimedOutException{})
  readStructEnd iprot
  return record
data AuthenticationException = AuthenticationException{f_AuthenticationException_why :: Maybe String} deriving (Show,Eq,Ord,Typeable)
instance Exception AuthenticationException
write_AuthenticationException oprot record = do
  writeStructBegin oprot "AuthenticationException"
  case f_AuthenticationException_why record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("why",T_STRING,1)
    writeString oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_AuthenticationException_fields iprot record = do
  (_,_t44,_id45) <- readFieldBegin iprot
  if _t44 == T_STOP then return record else
    case _id45 of 
      1 -> if _t44 == T_STRING then do
        s <- readString iprot
        read_AuthenticationException_fields iprot record{f_AuthenticationException_why=Just s}
        else do
          skip iprot _t44
          read_AuthenticationException_fields iprot record
      _ -> do
        skip iprot _t44
        readFieldEnd iprot
        read_AuthenticationException_fields iprot record
read_AuthenticationException iprot = do
  _ <- readStructBegin iprot
  record <- read_AuthenticationException_fields iprot (AuthenticationException{f_AuthenticationException_why=Nothing})
  readStructEnd iprot
  return record
data AuthorizationException = AuthorizationException{f_AuthorizationException_why :: Maybe String} deriving (Show,Eq,Ord,Typeable)
instance Exception AuthorizationException
write_AuthorizationException oprot record = do
  writeStructBegin oprot "AuthorizationException"
  case f_AuthorizationException_why record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("why",T_STRING,1)
    writeString oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_AuthorizationException_fields iprot record = do
  (_,_t49,_id50) <- readFieldBegin iprot
  if _t49 == T_STOP then return record else
    case _id50 of 
      1 -> if _t49 == T_STRING then do
        s <- readString iprot
        read_AuthorizationException_fields iprot record{f_AuthorizationException_why=Just s}
        else do
          skip iprot _t49
          read_AuthorizationException_fields iprot record
      _ -> do
        skip iprot _t49
        readFieldEnd iprot
        read_AuthorizationException_fields iprot record
read_AuthorizationException iprot = do
  _ <- readStructBegin iprot
  record <- read_AuthorizationException_fields iprot (AuthorizationException{f_AuthorizationException_why=Nothing})
  readStructEnd iprot
  return record
data ColumnParent = ColumnParent{f_ColumnParent_column_family :: Maybe String,f_ColumnParent_super_column :: Maybe ByteString} deriving (Show,Eq,Ord,Typeable)
write_ColumnParent oprot record = do
  writeStructBegin oprot "ColumnParent"
  case f_ColumnParent_column_family record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("column_family",T_STRING,3)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_ColumnParent_super_column record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("super_column",T_STRING,4)
    writeBinary oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_ColumnParent_fields iprot record = do
  (_,_t54,_id55) <- readFieldBegin iprot
  if _t54 == T_STOP then return record else
    case _id55 of 
      3 -> if _t54 == T_STRING then do
        s <- readString iprot
        read_ColumnParent_fields iprot record{f_ColumnParent_column_family=Just s}
        else do
          skip iprot _t54
          read_ColumnParent_fields iprot record
      4 -> if _t54 == T_STRING then do
        s <- readBinary iprot
        read_ColumnParent_fields iprot record{f_ColumnParent_super_column=Just s}
        else do
          skip iprot _t54
          read_ColumnParent_fields iprot record
      _ -> do
        skip iprot _t54
        readFieldEnd iprot
        read_ColumnParent_fields iprot record
read_ColumnParent iprot = do
  _ <- readStructBegin iprot
  record <- read_ColumnParent_fields iprot (ColumnParent{f_ColumnParent_column_family=Nothing,f_ColumnParent_super_column=Nothing})
  readStructEnd iprot
  return record
data ColumnPath = ColumnPath{f_ColumnPath_column_family :: Maybe String,f_ColumnPath_super_column :: Maybe ByteString,f_ColumnPath_column :: Maybe ByteString} deriving (Show,Eq,Ord,Typeable)
write_ColumnPath oprot record = do
  writeStructBegin oprot "ColumnPath"
  case f_ColumnPath_column_family record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("column_family",T_STRING,3)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_ColumnPath_super_column record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("super_column",T_STRING,4)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_ColumnPath_column record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("column",T_STRING,5)
    writeBinary oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_ColumnPath_fields iprot record = do
  (_,_t59,_id60) <- readFieldBegin iprot
  if _t59 == T_STOP then return record else
    case _id60 of 
      3 -> if _t59 == T_STRING then do
        s <- readString iprot
        read_ColumnPath_fields iprot record{f_ColumnPath_column_family=Just s}
        else do
          skip iprot _t59
          read_ColumnPath_fields iprot record
      4 -> if _t59 == T_STRING then do
        s <- readBinary iprot
        read_ColumnPath_fields iprot record{f_ColumnPath_super_column=Just s}
        else do
          skip iprot _t59
          read_ColumnPath_fields iprot record
      5 -> if _t59 == T_STRING then do
        s <- readBinary iprot
        read_ColumnPath_fields iprot record{f_ColumnPath_column=Just s}
        else do
          skip iprot _t59
          read_ColumnPath_fields iprot record
      _ -> do
        skip iprot _t59
        readFieldEnd iprot
        read_ColumnPath_fields iprot record
read_ColumnPath iprot = do
  _ <- readStructBegin iprot
  record <- read_ColumnPath_fields iprot (ColumnPath{f_ColumnPath_column_family=Nothing,f_ColumnPath_super_column=Nothing,f_ColumnPath_column=Nothing})
  readStructEnd iprot
  return record
data SliceRange = SliceRange{f_SliceRange_start :: Maybe ByteString,f_SliceRange_finish :: Maybe ByteString,f_SliceRange_reversed :: Maybe Bool,f_SliceRange_count :: Maybe Int32} deriving (Show,Eq,Ord,Typeable)
write_SliceRange oprot record = do
  writeStructBegin oprot "SliceRange"
  case f_SliceRange_start record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("start",T_STRING,1)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_SliceRange_finish record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("finish",T_STRING,2)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_SliceRange_reversed record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("reversed",T_BOOL,3)
    writeBool oprot _v
    writeFieldEnd oprot}
  case f_SliceRange_count record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("count",T_I32,4)
    writeI32 oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_SliceRange_fields iprot record = do
  (_,_t64,_id65) <- readFieldBegin iprot
  if _t64 == T_STOP then return record else
    case _id65 of 
      1 -> if _t64 == T_STRING then do
        s <- readBinary iprot
        read_SliceRange_fields iprot record{f_SliceRange_start=Just s}
        else do
          skip iprot _t64
          read_SliceRange_fields iprot record
      2 -> if _t64 == T_STRING then do
        s <- readBinary iprot
        read_SliceRange_fields iprot record{f_SliceRange_finish=Just s}
        else do
          skip iprot _t64
          read_SliceRange_fields iprot record
      3 -> if _t64 == T_BOOL then do
        s <- readBool iprot
        read_SliceRange_fields iprot record{f_SliceRange_reversed=Just s}
        else do
          skip iprot _t64
          read_SliceRange_fields iprot record
      4 -> if _t64 == T_I32 then do
        s <- readI32 iprot
        read_SliceRange_fields iprot record{f_SliceRange_count=Just s}
        else do
          skip iprot _t64
          read_SliceRange_fields iprot record
      _ -> do
        skip iprot _t64
        readFieldEnd iprot
        read_SliceRange_fields iprot record
read_SliceRange iprot = do
  _ <- readStructBegin iprot
  record <- read_SliceRange_fields iprot (SliceRange{f_SliceRange_start=Nothing,f_SliceRange_finish=Nothing,f_SliceRange_reversed=Nothing,f_SliceRange_count=Nothing})
  readStructEnd iprot
  return record
data SlicePredicate = SlicePredicate{f_SlicePredicate_column_names :: Maybe [ByteString],f_SlicePredicate_slice_range :: Maybe SliceRange} deriving (Show,Eq,Ord,Typeable)
write_SlicePredicate oprot record = do
  writeStructBegin oprot "SlicePredicate"
  case f_SlicePredicate_column_names record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("column_names",T_LIST,1)
    (let {f [] = return (); f (_viter68:t) = do {writeBinary oprot _viter68;f t}} in do {writeListBegin oprot (T_STRING,fromIntegral $ Prelude.length _v); f _v;writeListEnd oprot})
    writeFieldEnd oprot}
  case f_SlicePredicate_slice_range record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("slice_range",T_STRUCT,2)
    write_SliceRange oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_SlicePredicate_fields iprot record = do
  (_,_t70,_id71) <- readFieldBegin iprot
  if _t70 == T_STOP then return record else
    case _id71 of 
      1 -> if _t70 == T_LIST then do
        s <- (let {f 0 = return []; f n = do {v <- readBinary iprot;r <- f (n-1); return $ v:r}} in do {(_etype75,_size72) <- readListBegin iprot; f _size72})
        read_SlicePredicate_fields iprot record{f_SlicePredicate_column_names=Just s}
        else do
          skip iprot _t70
          read_SlicePredicate_fields iprot record
      2 -> if _t70 == T_STRUCT then do
        s <- (read_SliceRange iprot)
        read_SlicePredicate_fields iprot record{f_SlicePredicate_slice_range=Just s}
        else do
          skip iprot _t70
          read_SlicePredicate_fields iprot record
      _ -> do
        skip iprot _t70
        readFieldEnd iprot
        read_SlicePredicate_fields iprot record
read_SlicePredicate iprot = do
  _ <- readStructBegin iprot
  record <- read_SlicePredicate_fields iprot (SlicePredicate{f_SlicePredicate_column_names=Nothing,f_SlicePredicate_slice_range=Nothing})
  readStructEnd iprot
  return record
data IndexExpression = IndexExpression{f_IndexExpression_column_name :: Maybe ByteString,f_IndexExpression_op :: Maybe IndexOperator,f_IndexExpression_value :: Maybe ByteString} deriving (Show,Eq,Ord,Typeable)
write_IndexExpression oprot record = do
  writeStructBegin oprot "IndexExpression"
  case f_IndexExpression_column_name record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("column_name",T_STRING,1)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_IndexExpression_op record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("op",T_I32,2)
    writeI32 oprot (fromIntegral $ fromEnum _v)
    writeFieldEnd oprot}
  case f_IndexExpression_value record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("value",T_STRING,3)
    writeBinary oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_IndexExpression_fields iprot record = do
  (_,_t80,_id81) <- readFieldBegin iprot
  if _t80 == T_STOP then return record else
    case _id81 of 
      1 -> if _t80 == T_STRING then do
        s <- readBinary iprot
        read_IndexExpression_fields iprot record{f_IndexExpression_column_name=Just s}
        else do
          skip iprot _t80
          read_IndexExpression_fields iprot record
      2 -> if _t80 == T_I32 then do
        s <- (do {i <- readI32 iprot; return $ toEnum $ fromIntegral i})
        read_IndexExpression_fields iprot record{f_IndexExpression_op=Just s}
        else do
          skip iprot _t80
          read_IndexExpression_fields iprot record
      3 -> if _t80 == T_STRING then do
        s <- readBinary iprot
        read_IndexExpression_fields iprot record{f_IndexExpression_value=Just s}
        else do
          skip iprot _t80
          read_IndexExpression_fields iprot record
      _ -> do
        skip iprot _t80
        readFieldEnd iprot
        read_IndexExpression_fields iprot record
read_IndexExpression iprot = do
  _ <- readStructBegin iprot
  record <- read_IndexExpression_fields iprot (IndexExpression{f_IndexExpression_column_name=Nothing,f_IndexExpression_op=Nothing,f_IndexExpression_value=Nothing})
  readStructEnd iprot
  return record
data IndexClause = IndexClause{f_IndexClause_expressions :: Maybe [IndexExpression],f_IndexClause_start_key :: Maybe ByteString,f_IndexClause_count :: Maybe Int32} deriving (Show,Eq,Ord,Typeable)
write_IndexClause oprot record = do
  writeStructBegin oprot "IndexClause"
  case f_IndexClause_expressions record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("expressions",T_LIST,1)
    (let {f [] = return (); f (_viter84:t) = do {write_IndexExpression oprot _viter84;f t}} in do {writeListBegin oprot (T_STRUCT,fromIntegral $ Prelude.length _v); f _v;writeListEnd oprot})
    writeFieldEnd oprot}
  case f_IndexClause_start_key record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("start_key",T_STRING,2)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_IndexClause_count record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("count",T_I32,3)
    writeI32 oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_IndexClause_fields iprot record = do
  (_,_t86,_id87) <- readFieldBegin iprot
  if _t86 == T_STOP then return record else
    case _id87 of 
      1 -> if _t86 == T_LIST then do
        s <- (let {f 0 = return []; f n = do {v <- (read_IndexExpression iprot);r <- f (n-1); return $ v:r}} in do {(_etype91,_size88) <- readListBegin iprot; f _size88})
        read_IndexClause_fields iprot record{f_IndexClause_expressions=Just s}
        else do
          skip iprot _t86
          read_IndexClause_fields iprot record
      2 -> if _t86 == T_STRING then do
        s <- readBinary iprot
        read_IndexClause_fields iprot record{f_IndexClause_start_key=Just s}
        else do
          skip iprot _t86
          read_IndexClause_fields iprot record
      3 -> if _t86 == T_I32 then do
        s <- readI32 iprot
        read_IndexClause_fields iprot record{f_IndexClause_count=Just s}
        else do
          skip iprot _t86
          read_IndexClause_fields iprot record
      _ -> do
        skip iprot _t86
        readFieldEnd iprot
        read_IndexClause_fields iprot record
read_IndexClause iprot = do
  _ <- readStructBegin iprot
  record <- read_IndexClause_fields iprot (IndexClause{f_IndexClause_expressions=Nothing,f_IndexClause_start_key=Nothing,f_IndexClause_count=Nothing})
  readStructEnd iprot
  return record
data KeyRange = KeyRange{f_KeyRange_start_key :: Maybe ByteString,f_KeyRange_end_key :: Maybe ByteString,f_KeyRange_start_token :: Maybe String,f_KeyRange_end_token :: Maybe String,f_KeyRange_count :: Maybe Int32} deriving (Show,Eq,Ord,Typeable)
write_KeyRange oprot record = do
  writeStructBegin oprot "KeyRange"
  case f_KeyRange_start_key record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("start_key",T_STRING,1)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_KeyRange_end_key record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("end_key",T_STRING,2)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_KeyRange_start_token record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("start_token",T_STRING,3)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_KeyRange_end_token record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("end_token",T_STRING,4)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_KeyRange_count record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("count",T_I32,5)
    writeI32 oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_KeyRange_fields iprot record = do
  (_,_t96,_id97) <- readFieldBegin iprot
  if _t96 == T_STOP then return record else
    case _id97 of 
      1 -> if _t96 == T_STRING then do
        s <- readBinary iprot
        read_KeyRange_fields iprot record{f_KeyRange_start_key=Just s}
        else do
          skip iprot _t96
          read_KeyRange_fields iprot record
      2 -> if _t96 == T_STRING then do
        s <- readBinary iprot
        read_KeyRange_fields iprot record{f_KeyRange_end_key=Just s}
        else do
          skip iprot _t96
          read_KeyRange_fields iprot record
      3 -> if _t96 == T_STRING then do
        s <- readString iprot
        read_KeyRange_fields iprot record{f_KeyRange_start_token=Just s}
        else do
          skip iprot _t96
          read_KeyRange_fields iprot record
      4 -> if _t96 == T_STRING then do
        s <- readString iprot
        read_KeyRange_fields iprot record{f_KeyRange_end_token=Just s}
        else do
          skip iprot _t96
          read_KeyRange_fields iprot record
      5 -> if _t96 == T_I32 then do
        s <- readI32 iprot
        read_KeyRange_fields iprot record{f_KeyRange_count=Just s}
        else do
          skip iprot _t96
          read_KeyRange_fields iprot record
      _ -> do
        skip iprot _t96
        readFieldEnd iprot
        read_KeyRange_fields iprot record
read_KeyRange iprot = do
  _ <- readStructBegin iprot
  record <- read_KeyRange_fields iprot (KeyRange{f_KeyRange_start_key=Nothing,f_KeyRange_end_key=Nothing,f_KeyRange_start_token=Nothing,f_KeyRange_end_token=Nothing,f_KeyRange_count=Nothing})
  readStructEnd iprot
  return record
data KeySlice = KeySlice{f_KeySlice_key :: Maybe ByteString,f_KeySlice_columns :: Maybe [ColumnOrSuperColumn]} deriving (Show,Eq,Ord,Typeable)
write_KeySlice oprot record = do
  writeStructBegin oprot "KeySlice"
  case f_KeySlice_key record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("key",T_STRING,1)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_KeySlice_columns record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("columns",T_LIST,2)
    (let {f [] = return (); f (_viter100:t) = do {write_ColumnOrSuperColumn oprot _viter100;f t}} in do {writeListBegin oprot (T_STRUCT,fromIntegral $ Prelude.length _v); f _v;writeListEnd oprot})
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_KeySlice_fields iprot record = do
  (_,_t102,_id103) <- readFieldBegin iprot
  if _t102 == T_STOP then return record else
    case _id103 of 
      1 -> if _t102 == T_STRING then do
        s <- readBinary iprot
        read_KeySlice_fields iprot record{f_KeySlice_key=Just s}
        else do
          skip iprot _t102
          read_KeySlice_fields iprot record
      2 -> if _t102 == T_LIST then do
        s <- (let {f 0 = return []; f n = do {v <- (read_ColumnOrSuperColumn iprot);r <- f (n-1); return $ v:r}} in do {(_etype107,_size104) <- readListBegin iprot; f _size104})
        read_KeySlice_fields iprot record{f_KeySlice_columns=Just s}
        else do
          skip iprot _t102
          read_KeySlice_fields iprot record
      _ -> do
        skip iprot _t102
        readFieldEnd iprot
        read_KeySlice_fields iprot record
read_KeySlice iprot = do
  _ <- readStructBegin iprot
  record <- read_KeySlice_fields iprot (KeySlice{f_KeySlice_key=Nothing,f_KeySlice_columns=Nothing})
  readStructEnd iprot
  return record
data KeyCount = KeyCount{f_KeyCount_key :: Maybe ByteString,f_KeyCount_count :: Maybe Int32} deriving (Show,Eq,Ord,Typeable)
write_KeyCount oprot record = do
  writeStructBegin oprot "KeyCount"
  case f_KeyCount_key record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("key",T_STRING,1)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_KeyCount_count record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("count",T_I32,2)
    writeI32 oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_KeyCount_fields iprot record = do
  (_,_t112,_id113) <- readFieldBegin iprot
  if _t112 == T_STOP then return record else
    case _id113 of 
      1 -> if _t112 == T_STRING then do
        s <- readBinary iprot
        read_KeyCount_fields iprot record{f_KeyCount_key=Just s}
        else do
          skip iprot _t112
          read_KeyCount_fields iprot record
      2 -> if _t112 == T_I32 then do
        s <- readI32 iprot
        read_KeyCount_fields iprot record{f_KeyCount_count=Just s}
        else do
          skip iprot _t112
          read_KeyCount_fields iprot record
      _ -> do
        skip iprot _t112
        readFieldEnd iprot
        read_KeyCount_fields iprot record
read_KeyCount iprot = do
  _ <- readStructBegin iprot
  record <- read_KeyCount_fields iprot (KeyCount{f_KeyCount_key=Nothing,f_KeyCount_count=Nothing})
  readStructEnd iprot
  return record
data Deletion = Deletion{f_Deletion_timestamp :: Maybe Int64,f_Deletion_super_column :: Maybe ByteString,f_Deletion_predicate :: Maybe SlicePredicate} deriving (Show,Eq,Ord,Typeable)
write_Deletion oprot record = do
  writeStructBegin oprot "Deletion"
  case f_Deletion_timestamp record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("timestamp",T_I64,1)
    writeI64 oprot _v
    writeFieldEnd oprot}
  case f_Deletion_super_column record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("super_column",T_STRING,2)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_Deletion_predicate record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("predicate",T_STRUCT,3)
    write_SlicePredicate oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_Deletion_fields iprot record = do
  (_,_t117,_id118) <- readFieldBegin iprot
  if _t117 == T_STOP then return record else
    case _id118 of 
      1 -> if _t117 == T_I64 then do
        s <- readI64 iprot
        read_Deletion_fields iprot record{f_Deletion_timestamp=Just s}
        else do
          skip iprot _t117
          read_Deletion_fields iprot record
      2 -> if _t117 == T_STRING then do
        s <- readBinary iprot
        read_Deletion_fields iprot record{f_Deletion_super_column=Just s}
        else do
          skip iprot _t117
          read_Deletion_fields iprot record
      3 -> if _t117 == T_STRUCT then do
        s <- (read_SlicePredicate iprot)
        read_Deletion_fields iprot record{f_Deletion_predicate=Just s}
        else do
          skip iprot _t117
          read_Deletion_fields iprot record
      _ -> do
        skip iprot _t117
        readFieldEnd iprot
        read_Deletion_fields iprot record
read_Deletion iprot = do
  _ <- readStructBegin iprot
  record <- read_Deletion_fields iprot (Deletion{f_Deletion_timestamp=Nothing,f_Deletion_super_column=Nothing,f_Deletion_predicate=Nothing})
  readStructEnd iprot
  return record
data Mutation = Mutation{f_Mutation_column_or_supercolumn :: Maybe ColumnOrSuperColumn,f_Mutation_deletion :: Maybe Deletion} deriving (Show,Eq,Ord,Typeable)
write_Mutation oprot record = do
  writeStructBegin oprot "Mutation"
  case f_Mutation_column_or_supercolumn record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("column_or_supercolumn",T_STRUCT,1)
    write_ColumnOrSuperColumn oprot _v
    writeFieldEnd oprot}
  case f_Mutation_deletion record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("deletion",T_STRUCT,2)
    write_Deletion oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_Mutation_fields iprot record = do
  (_,_t122,_id123) <- readFieldBegin iprot
  if _t122 == T_STOP then return record else
    case _id123 of 
      1 -> if _t122 == T_STRUCT then do
        s <- (read_ColumnOrSuperColumn iprot)
        read_Mutation_fields iprot record{f_Mutation_column_or_supercolumn=Just s}
        else do
          skip iprot _t122
          read_Mutation_fields iprot record
      2 -> if _t122 == T_STRUCT then do
        s <- (read_Deletion iprot)
        read_Mutation_fields iprot record{f_Mutation_deletion=Just s}
        else do
          skip iprot _t122
          read_Mutation_fields iprot record
      _ -> do
        skip iprot _t122
        readFieldEnd iprot
        read_Mutation_fields iprot record
read_Mutation iprot = do
  _ <- readStructBegin iprot
  record <- read_Mutation_fields iprot (Mutation{f_Mutation_column_or_supercolumn=Nothing,f_Mutation_deletion=Nothing})
  readStructEnd iprot
  return record
data TokenRange = TokenRange{f_TokenRange_start_token :: Maybe String,f_TokenRange_end_token :: Maybe String,f_TokenRange_endpoints :: Maybe [String]} deriving (Show,Eq,Ord,Typeable)
write_TokenRange oprot record = do
  writeStructBegin oprot "TokenRange"
  case f_TokenRange_start_token record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("start_token",T_STRING,1)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_TokenRange_end_token record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("end_token",T_STRING,2)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_TokenRange_endpoints record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("endpoints",T_LIST,3)
    (let {f [] = return (); f (_viter126:t) = do {writeString oprot _viter126;f t}} in do {writeListBegin oprot (T_STRING,fromIntegral $ Prelude.length _v); f _v;writeListEnd oprot})
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_TokenRange_fields iprot record = do
  (_,_t128,_id129) <- readFieldBegin iprot
  if _t128 == T_STOP then return record else
    case _id129 of 
      1 -> if _t128 == T_STRING then do
        s <- readString iprot
        read_TokenRange_fields iprot record{f_TokenRange_start_token=Just s}
        else do
          skip iprot _t128
          read_TokenRange_fields iprot record
      2 -> if _t128 == T_STRING then do
        s <- readString iprot
        read_TokenRange_fields iprot record{f_TokenRange_end_token=Just s}
        else do
          skip iprot _t128
          read_TokenRange_fields iprot record
      3 -> if _t128 == T_LIST then do
        s <- (let {f 0 = return []; f n = do {v <- readString iprot;r <- f (n-1); return $ v:r}} in do {(_etype133,_size130) <- readListBegin iprot; f _size130})
        read_TokenRange_fields iprot record{f_TokenRange_endpoints=Just s}
        else do
          skip iprot _t128
          read_TokenRange_fields iprot record
      _ -> do
        skip iprot _t128
        readFieldEnd iprot
        read_TokenRange_fields iprot record
read_TokenRange iprot = do
  _ <- readStructBegin iprot
  record <- read_TokenRange_fields iprot (TokenRange{f_TokenRange_start_token=Nothing,f_TokenRange_end_token=Nothing,f_TokenRange_endpoints=Nothing})
  readStructEnd iprot
  return record
data AuthenticationRequest = AuthenticationRequest{f_AuthenticationRequest_credentials :: Maybe (Map.Map String String)} deriving (Show,Eq,Ord,Typeable)
write_AuthenticationRequest oprot record = do
  writeStructBegin oprot "AuthenticationRequest"
  case f_AuthenticationRequest_credentials record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("credentials",T_MAP,1)
    (let {f [] = return (); f ((_kiter137,_viter138):t) = do {do {writeString oprot _kiter137;writeString oprot _viter138};f t}} in do {writeMapBegin oprot (T_STRING,T_STRING,fromIntegral $ Map.size _v); f (Map.toList _v);writeMapEnd oprot})
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_AuthenticationRequest_fields iprot record = do
  (_,_t140,_id141) <- readFieldBegin iprot
  if _t140 == T_STOP then return record else
    case _id141 of 
      1 -> if _t140 == T_MAP then do
        s <- (let {f 0 = return []; f n = do {k <- readString iprot; v <- readString iprot;r <- f (n-1); return $ (k,v):r}} in do {(_ktype143,_vtype144,_size142) <- readMapBegin iprot; l <- f _size142; return $ Map.fromList l})
        read_AuthenticationRequest_fields iprot record{f_AuthenticationRequest_credentials=Just s}
        else do
          skip iprot _t140
          read_AuthenticationRequest_fields iprot record
      _ -> do
        skip iprot _t140
        readFieldEnd iprot
        read_AuthenticationRequest_fields iprot record
read_AuthenticationRequest iprot = do
  _ <- readStructBegin iprot
  record <- read_AuthenticationRequest_fields iprot (AuthenticationRequest{f_AuthenticationRequest_credentials=Nothing})
  readStructEnd iprot
  return record
data ColumnDef = ColumnDef{f_ColumnDef_name :: Maybe ByteString,f_ColumnDef_validation_class :: Maybe String,f_ColumnDef_index_type :: Maybe IndexType,f_ColumnDef_index_name :: Maybe String} deriving (Show,Eq,Ord,Typeable)
write_ColumnDef oprot record = do
  writeStructBegin oprot "ColumnDef"
  case f_ColumnDef_name record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("name",T_STRING,1)
    writeBinary oprot _v
    writeFieldEnd oprot}
  case f_ColumnDef_validation_class record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("validation_class",T_STRING,2)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_ColumnDef_index_type record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("index_type",T_I32,3)
    writeI32 oprot (fromIntegral $ fromEnum _v)
    writeFieldEnd oprot}
  case f_ColumnDef_index_name record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("index_name",T_STRING,4)
    writeString oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_ColumnDef_fields iprot record = do
  (_,_t150,_id151) <- readFieldBegin iprot
  if _t150 == T_STOP then return record else
    case _id151 of 
      1 -> if _t150 == T_STRING then do
        s <- readBinary iprot
        read_ColumnDef_fields iprot record{f_ColumnDef_name=Just s}
        else do
          skip iprot _t150
          read_ColumnDef_fields iprot record
      2 -> if _t150 == T_STRING then do
        s <- readString iprot
        read_ColumnDef_fields iprot record{f_ColumnDef_validation_class=Just s}
        else do
          skip iprot _t150
          read_ColumnDef_fields iprot record
      3 -> if _t150 == T_I32 then do
        s <- (do {i <- readI32 iprot; return $ toEnum $ fromIntegral i})
        read_ColumnDef_fields iprot record{f_ColumnDef_index_type=Just s}
        else do
          skip iprot _t150
          read_ColumnDef_fields iprot record
      4 -> if _t150 == T_STRING then do
        s <- readString iprot
        read_ColumnDef_fields iprot record{f_ColumnDef_index_name=Just s}
        else do
          skip iprot _t150
          read_ColumnDef_fields iprot record
      _ -> do
        skip iprot _t150
        readFieldEnd iprot
        read_ColumnDef_fields iprot record
read_ColumnDef iprot = do
  _ <- readStructBegin iprot
  record <- read_ColumnDef_fields iprot (ColumnDef{f_ColumnDef_name=Nothing,f_ColumnDef_validation_class=Nothing,f_ColumnDef_index_type=Nothing,f_ColumnDef_index_name=Nothing})
  readStructEnd iprot
  return record
data CfDef = CfDef{f_CfDef_keyspace :: Maybe String,f_CfDef_name :: Maybe String,f_CfDef_column_type :: Maybe String,f_CfDef_comparator_type :: Maybe String,f_CfDef_subcomparator_type :: Maybe String,f_CfDef_comment :: Maybe String,f_CfDef_row_cache_size :: Maybe Double,f_CfDef_key_cache_size :: Maybe Double,f_CfDef_read_repair_chance :: Maybe Double,f_CfDef_column_metadata :: Maybe [ColumnDef],f_CfDef_gc_grace_seconds :: Maybe Int32,f_CfDef_default_validation_class :: Maybe String,f_CfDef_id :: Maybe Int32,f_CfDef_min_compaction_threshold :: Maybe Int32,f_CfDef_max_compaction_threshold :: Maybe Int32,f_CfDef_row_cache_save_period_in_seconds :: Maybe Int32,f_CfDef_key_cache_save_period_in_seconds :: Maybe Int32,f_CfDef_memtable_flush_after_mins :: Maybe Int32,f_CfDef_memtable_throughput_in_mb :: Maybe Int32,f_CfDef_memtable_operations_in_millions :: Maybe Double} deriving (Show,Eq,Ord,Typeable)
write_CfDef oprot record = do
  writeStructBegin oprot "CfDef"
  case f_CfDef_keyspace record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("keyspace",T_STRING,1)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_CfDef_name record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("name",T_STRING,2)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_CfDef_column_type record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("column_type",T_STRING,3)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_CfDef_comparator_type record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("comparator_type",T_STRING,5)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_CfDef_subcomparator_type record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("subcomparator_type",T_STRING,6)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_CfDef_comment record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("comment",T_STRING,8)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_CfDef_row_cache_size record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("row_cache_size",T_DOUBLE,9)
    writeDouble oprot _v
    writeFieldEnd oprot}
  case f_CfDef_key_cache_size record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("key_cache_size",T_DOUBLE,11)
    writeDouble oprot _v
    writeFieldEnd oprot}
  case f_CfDef_read_repair_chance record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("read_repair_chance",T_DOUBLE,12)
    writeDouble oprot _v
    writeFieldEnd oprot}
  case f_CfDef_column_metadata record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("column_metadata",T_LIST,13)
    (let {f [] = return (); f (_viter154:t) = do {write_ColumnDef oprot _viter154;f t}} in do {writeListBegin oprot (T_STRUCT,fromIntegral $ Prelude.length _v); f _v;writeListEnd oprot})
    writeFieldEnd oprot}
  case f_CfDef_gc_grace_seconds record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("gc_grace_seconds",T_I32,14)
    writeI32 oprot _v
    writeFieldEnd oprot}
  case f_CfDef_default_validation_class record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("default_validation_class",T_STRING,15)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_CfDef_id record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("id",T_I32,16)
    writeI32 oprot _v
    writeFieldEnd oprot}
  case f_CfDef_min_compaction_threshold record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("min_compaction_threshold",T_I32,17)
    writeI32 oprot _v
    writeFieldEnd oprot}
  case f_CfDef_max_compaction_threshold record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("max_compaction_threshold",T_I32,18)
    writeI32 oprot _v
    writeFieldEnd oprot}
  case f_CfDef_row_cache_save_period_in_seconds record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("row_cache_save_period_in_seconds",T_I32,19)
    writeI32 oprot _v
    writeFieldEnd oprot}
  case f_CfDef_key_cache_save_period_in_seconds record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("key_cache_save_period_in_seconds",T_I32,20)
    writeI32 oprot _v
    writeFieldEnd oprot}
  case f_CfDef_memtable_flush_after_mins record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("memtable_flush_after_mins",T_I32,21)
    writeI32 oprot _v
    writeFieldEnd oprot}
  case f_CfDef_memtable_throughput_in_mb record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("memtable_throughput_in_mb",T_I32,22)
    writeI32 oprot _v
    writeFieldEnd oprot}
  case f_CfDef_memtable_operations_in_millions record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("memtable_operations_in_millions",T_DOUBLE,23)
    writeDouble oprot _v
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_CfDef_fields iprot record = do
  (_,_t156,_id157) <- readFieldBegin iprot
  if _t156 == T_STOP then return record else
    case _id157 of 
      1 -> if _t156 == T_STRING then do
        s <- readString iprot
        read_CfDef_fields iprot record{f_CfDef_keyspace=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      2 -> if _t156 == T_STRING then do
        s <- readString iprot
        read_CfDef_fields iprot record{f_CfDef_name=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      3 -> if _t156 == T_STRING then do
        s <- readString iprot
        read_CfDef_fields iprot record{f_CfDef_column_type=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      5 -> if _t156 == T_STRING then do
        s <- readString iprot
        read_CfDef_fields iprot record{f_CfDef_comparator_type=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      6 -> if _t156 == T_STRING then do
        s <- readString iprot
        read_CfDef_fields iprot record{f_CfDef_subcomparator_type=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      8 -> if _t156 == T_STRING then do
        s <- readString iprot
        read_CfDef_fields iprot record{f_CfDef_comment=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      9 -> if _t156 == T_DOUBLE then do
        s <- readDouble iprot
        read_CfDef_fields iprot record{f_CfDef_row_cache_size=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      11 -> if _t156 == T_DOUBLE then do
        s <- readDouble iprot
        read_CfDef_fields iprot record{f_CfDef_key_cache_size=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      12 -> if _t156 == T_DOUBLE then do
        s <- readDouble iprot
        read_CfDef_fields iprot record{f_CfDef_read_repair_chance=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      13 -> if _t156 == T_LIST then do
        s <- (let {f 0 = return []; f n = do {v <- (read_ColumnDef iprot);r <- f (n-1); return $ v:r}} in do {(_etype161,_size158) <- readListBegin iprot; f _size158})
        read_CfDef_fields iprot record{f_CfDef_column_metadata=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      14 -> if _t156 == T_I32 then do
        s <- readI32 iprot
        read_CfDef_fields iprot record{f_CfDef_gc_grace_seconds=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      15 -> if _t156 == T_STRING then do
        s <- readString iprot
        read_CfDef_fields iprot record{f_CfDef_default_validation_class=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      16 -> if _t156 == T_I32 then do
        s <- readI32 iprot
        read_CfDef_fields iprot record{f_CfDef_id=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      17 -> if _t156 == T_I32 then do
        s <- readI32 iprot
        read_CfDef_fields iprot record{f_CfDef_min_compaction_threshold=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      18 -> if _t156 == T_I32 then do
        s <- readI32 iprot
        read_CfDef_fields iprot record{f_CfDef_max_compaction_threshold=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      19 -> if _t156 == T_I32 then do
        s <- readI32 iprot
        read_CfDef_fields iprot record{f_CfDef_row_cache_save_period_in_seconds=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      20 -> if _t156 == T_I32 then do
        s <- readI32 iprot
        read_CfDef_fields iprot record{f_CfDef_key_cache_save_period_in_seconds=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      21 -> if _t156 == T_I32 then do
        s <- readI32 iprot
        read_CfDef_fields iprot record{f_CfDef_memtable_flush_after_mins=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      22 -> if _t156 == T_I32 then do
        s <- readI32 iprot
        read_CfDef_fields iprot record{f_CfDef_memtable_throughput_in_mb=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      23 -> if _t156 == T_DOUBLE then do
        s <- readDouble iprot
        read_CfDef_fields iprot record{f_CfDef_memtable_operations_in_millions=Just s}
        else do
          skip iprot _t156
          read_CfDef_fields iprot record
      _ -> do
        skip iprot _t156
        readFieldEnd iprot
        read_CfDef_fields iprot record
read_CfDef iprot = do
  _ <- readStructBegin iprot
  record <- read_CfDef_fields iprot (CfDef{f_CfDef_keyspace=Nothing,f_CfDef_name=Nothing,f_CfDef_column_type=Nothing,f_CfDef_comparator_type=Nothing,f_CfDef_subcomparator_type=Nothing,f_CfDef_comment=Nothing,f_CfDef_row_cache_size=Nothing,f_CfDef_key_cache_size=Nothing,f_CfDef_read_repair_chance=Nothing,f_CfDef_column_metadata=Nothing,f_CfDef_gc_grace_seconds=Nothing,f_CfDef_default_validation_class=Nothing,f_CfDef_id=Nothing,f_CfDef_min_compaction_threshold=Nothing,f_CfDef_max_compaction_threshold=Nothing,f_CfDef_row_cache_save_period_in_seconds=Nothing,f_CfDef_key_cache_save_period_in_seconds=Nothing,f_CfDef_memtable_flush_after_mins=Nothing,f_CfDef_memtable_throughput_in_mb=Nothing,f_CfDef_memtable_operations_in_millions=Nothing})
  readStructEnd iprot
  return record
data KsDef = KsDef{f_KsDef_name :: Maybe String,f_KsDef_strategy_class :: Maybe String,f_KsDef_strategy_options :: Maybe (Map.Map String String),f_KsDef_replication_factor :: Maybe Int32,f_KsDef_cf_defs :: Maybe [CfDef]} deriving (Show,Eq,Ord,Typeable)
write_KsDef oprot record = do
  writeStructBegin oprot "KsDef"
  case f_KsDef_name record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("name",T_STRING,1)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_KsDef_strategy_class record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("strategy_class",T_STRING,2)
    writeString oprot _v
    writeFieldEnd oprot}
  case f_KsDef_strategy_options record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("strategy_options",T_MAP,3)
    (let {f [] = return (); f ((_kiter165,_viter166):t) = do {do {writeString oprot _kiter165;writeString oprot _viter166};f t}} in do {writeMapBegin oprot (T_STRING,T_STRING,fromIntegral $ Map.size _v); f (Map.toList _v);writeMapEnd oprot})
    writeFieldEnd oprot}
  case f_KsDef_replication_factor record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("replication_factor",T_I32,4)
    writeI32 oprot _v
    writeFieldEnd oprot}
  case f_KsDef_cf_defs record of {Nothing -> return (); Just _v -> do
    writeFieldBegin oprot ("cf_defs",T_LIST,5)
    (let {f [] = return (); f (_viter167:t) = do {write_CfDef oprot _viter167;f t}} in do {writeListBegin oprot (T_STRUCT,fromIntegral $ Prelude.length _v); f _v;writeListEnd oprot})
    writeFieldEnd oprot}
  writeFieldStop oprot
  writeStructEnd oprot
read_KsDef_fields iprot record = do
  (_,_t169,_id170) <- readFieldBegin iprot
  if _t169 == T_STOP then return record else
    case _id170 of 
      1 -> if _t169 == T_STRING then do
        s <- readString iprot
        read_KsDef_fields iprot record{f_KsDef_name=Just s}
        else do
          skip iprot _t169
          read_KsDef_fields iprot record
      2 -> if _t169 == T_STRING then do
        s <- readString iprot
        read_KsDef_fields iprot record{f_KsDef_strategy_class=Just s}
        else do
          skip iprot _t169
          read_KsDef_fields iprot record
      3 -> if _t169 == T_MAP then do
        s <- (let {f 0 = return []; f n = do {k <- readString iprot; v <- readString iprot;r <- f (n-1); return $ (k,v):r}} in do {(_ktype172,_vtype173,_size171) <- readMapBegin iprot; l <- f _size171; return $ Map.fromList l})
        read_KsDef_fields iprot record{f_KsDef_strategy_options=Just s}
        else do
          skip iprot _t169
          read_KsDef_fields iprot record
      4 -> if _t169 == T_I32 then do
        s <- readI32 iprot
        read_KsDef_fields iprot record{f_KsDef_replication_factor=Just s}
        else do
          skip iprot _t169
          read_KsDef_fields iprot record
      5 -> if _t169 == T_LIST then do
        s <- (let {f 0 = return []; f n = do {v <- (read_CfDef iprot);r <- f (n-1); return $ v:r}} in do {(_etype179,_size176) <- readListBegin iprot; f _size176})
        read_KsDef_fields iprot record{f_KsDef_cf_defs=Just s}
        else do
          skip iprot _t169
          read_KsDef_fields iprot record
      _ -> do
        skip iprot _t169
        readFieldEnd iprot
        read_KsDef_fields iprot record
read_KsDef iprot = do
  _ <- readStructBegin iprot
  record <- read_KsDef_fields iprot (KsDef{f_KsDef_name=Nothing,f_KsDef_strategy_class=Nothing,f_KsDef_strategy_options=Nothing,f_KsDef_replication_factor=Nothing,f_KsDef_cf_defs=Nothing})
  readStructEnd iprot
  return record