riak-1.2.0.0: src/Network/Riak/Tag.hs
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- |
-- Module: Network.Riak.Content
-- Copyright: (c) 2011 MailRank, Inc.
-- License: Apache
-- Maintainer: Mark Hibberd <mark@hibberd.id.au>, Nathan Hunter <nhunter@janrain.com>
-- Stability: experimental
-- Portability: portable
--
-- im in ur msg system taggin ur msg types
module Network.Riak.Tag
(
putTag
, getTag
) where
import Data.Binary.Get (Get, getWord8)
import Data.Binary.Put (Put, putWord8)
import Data.Word (Word8)
import qualified Data.HashMap.Strict as HM
#if __GLASGOW_HASKELL__ <= 708
import Control.Applicative
#endif
import Data.Riak.Proto
import Data.Tuple (swap)
import Network.Riak.Types.Internal as Types
instance Tagged RpbErrorResp where
messageTag _ = Types.ErrorResponse
{-# INLINE messageTag #-}
instance Response RpbErrorResp
instance Tagged RpbPingReq where
messageTag _ = Types.PingRequest
{-# INLINE messageTag #-}
instance Request RpbPingReq where
expectedResponse _ = Types.PingResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbGetClientIdReq where
messageTag _ = Types.GetClientIDRequest
{-# INLINE messageTag #-}
instance Request RpbGetClientIdReq where
expectedResponse _ = Types.GetClientIDResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbGetClientIdResp where
messageTag _ = Types.GetClientIDResponse
{-# INLINE messageTag #-}
instance Response RpbGetClientIdResp
instance Exchange RpbGetClientIdReq RpbGetClientIdResp
instance Tagged RpbSetClientIdReq where
messageTag _ = Types.SetClientIDRequest
{-# INLINE messageTag #-}
instance Request RpbSetClientIdReq where
expectedResponse _ = Types.SetClientIDResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbGetServerInfoReq where
messageTag _ = Types.GetServerInfoRequest
{-# INLINE messageTag #-}
instance Request RpbGetServerInfoReq where
expectedResponse _ = Types.GetServerInfoResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbGetServerInfoResp where
messageTag _ = Types.GetServerInfoResponse
{-# INLINE messageTag #-}
instance Response RpbGetServerInfoResp
instance Exchange RpbGetServerInfoReq RpbGetServerInfoResp
instance Tagged RpbGetReq where
messageTag _ = Types.GetRequest
{-# INLINE messageTag #-}
instance Tagged RpbIndexReq where
messageTag _ = Types.IndexRequest
{-# INLINE messageTag #-}
instance Request RpbGetReq where
expectedResponse _ = Types.GetResponse
{-# INLINE expectedResponse #-}
instance Request RpbIndexReq where
expectedResponse _ = Types.IndexResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbGetResp where
messageTag _ = Types.GetResponse
{-# INLINE messageTag #-}
instance Tagged RpbIndexResp where
messageTag _ = Types.IndexResponse
{-# INLINE messageTag #-}
instance Response RpbGetResp
instance Response RpbIndexResp
instance Exchange RpbGetReq RpbGetResp
instance Exchange RpbIndexReq RpbIndexResp
instance Tagged RpbPutReq where
messageTag _ = Types.PutRequest
{-# INLINE messageTag #-}
instance Request RpbPutReq where
expectedResponse _ = Types.PutResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbPutResp where
messageTag _ = Types.PutResponse
{-# INLINE messageTag #-}
instance Response RpbPutResp
instance Exchange RpbPutReq RpbPutResp
instance Tagged RpbDelReq where
messageTag _ = Types.DeleteRequest
{-# INLINE messageTag #-}
instance Request RpbDelReq where
expectedResponse _ = Types.DeleteResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbListBucketsReq where
messageTag _ = Types.ListBucketsRequest
{-# INLINE messageTag #-}
instance Request RpbListBucketsReq where
expectedResponse _ = Types.ListBucketsResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbListBucketsResp where
messageTag _ = Types.ListBucketsResponse
{-# INLINE messageTag #-}
instance Response RpbListBucketsResp
instance Exchange RpbListBucketsReq RpbListBucketsResp
instance Tagged RpbListKeysReq where
messageTag _ = Types.ListKeysRequest
{-# INLINE messageTag #-}
instance Request RpbListKeysReq where
expectedResponse _ = Types.ListKeysResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbListKeysResp where
messageTag _ = Types.ListKeysResponse
{-# INLINE messageTag #-}
instance Response RpbListKeysResp
instance Tagged RpbGetBucketReq where
messageTag _ = Types.GetBucketRequest
{-# INLINE messageTag #-}
instance Request RpbGetBucketReq where
expectedResponse _ = Types.GetBucketResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbGetBucketResp where
messageTag _ = Types.GetBucketResponse
{-# INLINE messageTag #-}
instance Response RpbGetBucketResp
instance Exchange RpbGetBucketReq RpbGetBucketResp
instance Tagged RpbSetBucketReq where
messageTag _ = Types.SetBucketRequest
{-# INLINE messageTag #-}
instance Request RpbSetBucketReq where
expectedResponse _ = Types.SetBucketResponse
{-# INLINE expectedResponse #-}
instance Request RpbGetBucketTypeReq where
expectedResponse _ = Types.GetBucketResponse
instance Tagged RpbGetBucketTypeReq where
messageTag _ = Types.GetBucketTypeRequest
instance Exchange RpbGetBucketTypeReq RpbGetBucketResp
instance Tagged RpbMapRedReq where
messageTag _ = Types.MapReduceRequest
{-# INLINE messageTag #-}
instance Request RpbMapRedReq where
expectedResponse _ = Types.MapReduceResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbMapRedResp where
messageTag _ = Types.MapReduceResponse
{-# INLINE messageTag #-}
instance Response RpbMapRedResp
instance Exchange RpbMapRedReq RpbMapRedResp
instance Tagged DtFetchReq where
messageTag _ = Types.DtFetchRequest
{-# INLINE messageTag #-}
instance Tagged DtFetchResp where
messageTag _ = Types.DtFetchResponse
{-# INLINE messageTag #-}
instance Request DtFetchReq where
expectedResponse _ = Types.DtFetchResponse
{-# INLINE expectedResponse #-}
instance Response DtFetchResp
instance Exchange DtFetchReq DtFetchResp
instance Tagged DtUpdateReq where
messageTag _ = Types.DtUpdateRequest
{-# INLINE messageTag #-}
instance Tagged DtUpdateResp where
messageTag _ = Types.DtUpdateResponse
{-# INLINE messageTag #-}
instance Request DtUpdateReq where
expectedResponse _ = Types.DtUpdateResponse
{-# INLINE expectedResponse #-}
instance Response DtUpdateResp
instance Exchange DtUpdateReq DtUpdateResp
instance Tagged RpbSearchQueryReq where
messageTag _ = Types.SearchQueryRequest
{-# INLINE messageTag #-}
instance Request RpbSearchQueryReq where
expectedResponse _ = Types.SearchQueryResponse
{-# INLINE expectedResponse #-}
instance Tagged RpbSearchQueryResp where
messageTag _ = Types.SearchQueryResponse
{-# INLINE messageTag #-}
instance Response RpbSearchQueryResp
instance Exchange RpbSearchQueryReq RpbSearchQueryResp
instance Tagged RpbYokozunaIndexGetReq where
messageTag _ = Types.YokozunaIndexGetRequest
instance Request RpbYokozunaIndexGetReq where
expectedResponse _ = Types.YokozunaIndexGetResponse
instance Tagged RpbYokozunaIndexGetResp where
messageTag _ = Types.YokozunaIndexGetResponse
instance Response RpbYokozunaIndexGetResp
instance Exchange RpbYokozunaIndexGetReq RpbYokozunaIndexGetResp
instance Request RpbYokozunaIndexPutReq where
expectedResponse _ = Types.YokozunaIndexPutRequest
instance Tagged RpbYokozunaIndexPutReq where
messageTag _ = Types.YokozunaIndexPutRequest
instance Exchange RpbYokozunaIndexPutReq RpbPutResp
instance Tagged RpbYokozunaIndexDeleteReq where
messageTag _ = Types.YokozunaIndexDeleteRequest
instance Request RpbYokozunaIndexDeleteReq where
expectedResponse _ = Types.DeleteResponse
putTag :: MessageTag -> Put
putTag m = putWord8 $ message2code HM.! m
{-# INLINE putTag #-}
getTag :: Get MessageTag
getTag = do
n <- getWord8
maybe (err n) pure $ HM.lookup n code2message
where
err n = moduleError "getTag" $ "invalid riak message code: " ++ show n
{-# INLINE getTag #-}
moduleError :: String -> String -> a
moduleError = netError "Network.Riak.Tag"
code2message :: HM.HashMap Word8 MessageTag
code2message = HM.fromList messageCodes
message2code :: HM.HashMap MessageTag Word8
message2code = HM.fromList . map swap $ messageCodes
messageCodes :: [(Word8, MessageTag)]
messageCodes = [
-- From riak-2.1.3/deps/riak_pb/src/riak_pb_messages.csv
--
-- This is a list of all known riak messages (with appropriate
-- message codes). Most of them are described at
-- http://docs.basho.com/riak/2.1.3/dev/references/protocol-buffers/
--
-- Commented ones are messages we don't use/support yet.
(0, Types.ErrorResponse),
(1, Types.PingRequest),
(2, Types.PingResponse),
(3, Types.GetClientIDResponse),
(4, Types.GetClientIDResponse),
(5, Types.SetClientIDRequest),
(6, Types.SetClientIDResponse),
(7, Types.GetServerInfoRequest),
(8, Types.GetServerInfoResponse),
(9, Types.GetRequest),
(10, Types.GetResponse),
(11, Types.PutRequest),
(12, Types.PutResponse),
(13, Types.DeleteRequest),
(14, Types.DeleteResponse),
(15, Types.ListBucketsRequest),
(16, Types.ListBucketsResponse),
(17, Types.ListKeysRequest),
(18, Types.ListKeysResponse),
(19, Types.GetBucketRequest),
(20, Types.GetBucketResponse),
(21, Types.SetBucketRequest),
(22, Types.SetBucketResponse),
(23, Types.MapReduceRequest),
(24, Types.MapReduceResponse),
(25, Types.IndexRequest),
(26, Types.IndexResponse),
(27, Types.SearchQueryRequest),
(28, Types.SearchQueryResponse),
-- (29,ResetBucketRequest),
-- (30,ResetBucketResp),
(31, Types.GetBucketTypeRequest),
-- (32,SetBucketTypeReq),
-- (33,GetBucketKeyPreflistReq),
-- (34,GetBucketKeyPreflistResp),
-- (40,CSBucketReq),
-- (41,CSBucketResp),
-- (50,CounterUpdateReq),
-- (51,CounterUpdateResp),
-- (52,CounterGetReq),
-- (53,CounterGetResp),
(54, Types.YokozunaIndexGetRequest),
(55, Types.YokozunaIndexGetResponse),
(56, Types.YokozunaIndexPutRequest),
(57, Types.YokozunaIndexDeleteRequest),
-- (58,YokozunaSchemaGetReq),
-- (59,YokozunaSchemaGetResp),
-- (60,YokozunaSchemaPutReq),
(80, Types.DtFetchRequest),
(81, Types.DtFetchResponse),
(82, Types.DtUpdateRequest),
(83, Types.DtUpdateResponse)
-- (253,RpbAuthReq),
-- (254,RpbAuthResp),
-- (255,RpbStartTls)
]