module Database.RethinkDB.Wire.Response where
import Prelude (Maybe(..), Eq, Show)
import Database.RethinkDB.Wire
data ResponseType = SUCCESS_ATOM | SUCCESS_SEQUENCE | SUCCESS_PARTIAL | WAIT_COMPLETE | SERVER_INFO | CLIENT_ERROR | COMPILE_ERROR | RUNTIME_ERROR
  deriving (Eq, Show)
instance WireValue ResponseType where
  toWire SUCCESS_ATOM = 1
  toWire SUCCESS_SEQUENCE = 2
  toWire SUCCESS_PARTIAL = 3
  toWire WAIT_COMPLETE = 4
  toWire SERVER_INFO = 5
  toWire CLIENT_ERROR = 16
  toWire COMPILE_ERROR = 17
  toWire RUNTIME_ERROR = 18
  fromWire 1 = Just SUCCESS_ATOM
  fromWire 2 = Just SUCCESS_SEQUENCE
  fromWire 3 = Just SUCCESS_PARTIAL
  fromWire 4 = Just WAIT_COMPLETE
  fromWire 5 = Just SERVER_INFO
  fromWire 16 = Just CLIENT_ERROR
  fromWire 17 = Just COMPILE_ERROR
  fromWire 18 = Just RUNTIME_ERROR
  fromWire _ = Nothing


data ErrorType = INTERNAL | RESOURCE_LIMIT | QUERY_LOGIC | NON_EXISTENCE | OP_FAILED | OP_INDETERMINATE | USER
  deriving (Eq, Show)
instance WireValue ErrorType where
  toWire INTERNAL = 1000000
  toWire RESOURCE_LIMIT = 2000000
  toWire QUERY_LOGIC = 3000000
  toWire NON_EXISTENCE = 3100000
  toWire OP_FAILED = 4100000
  toWire OP_INDETERMINATE = 4200000
  toWire USER = 5000000
  fromWire 1000000 = Just INTERNAL
  fromWire 2000000 = Just RESOURCE_LIMIT
  fromWire 3000000 = Just QUERY_LOGIC
  fromWire 3100000 = Just NON_EXISTENCE
  fromWire 4100000 = Just OP_FAILED
  fromWire 4200000 = Just OP_INDETERMINATE
  fromWire 5000000 = Just USER
  fromWire _ = Nothing


data ResponseNote = SEQUENCE_FEED | ATOM_FEED | ORDER_BY_LIMIT_FEED | UNIONED_FEED | INCLUDES_STATES
  deriving (Eq, Show)
instance WireValue ResponseNote where
  toWire SEQUENCE_FEED = 1
  toWire ATOM_FEED = 2
  toWire ORDER_BY_LIMIT_FEED = 3
  toWire UNIONED_FEED = 4
  toWire INCLUDES_STATES = 5
  fromWire 1 = Just SEQUENCE_FEED
  fromWire 2 = Just ATOM_FEED
  fromWire 3 = Just ORDER_BY_LIMIT_FEED
  fromWire 4 = Just UNIONED_FEED
  fromWire 5 = Just INCLUDES_STATES
  fromWire _ = Nothing