packages feed

riak-1.2.0.0: src/Network/Riak/CRDT/Request.hs

-- |
-- Module:      Network.Riak.CRDT.Request
-- Copyright:   (c) 2016 Sentenai
-- Author:      Antonio Nikishaev <me@lelf.lu>
-- License:     Apache
-- Maintainer:  Tim McGilchrist <timmcgil@gmail.com>, Mark Hibberd <mark@hibberd.id.au>
-- Stability:   experimental
-- Portability: portable
--
module Network.Riak.CRDT.Request (
    get
  , counterUpdate
  , setUpdate
  , mapUpdate
  ) where

import           Data.ByteString (ByteString)
import qualified Data.Riak.Proto as Proto
import           Network.Riak.CRDT.Ops
import qualified Network.Riak.CRDT.Types as CRDT
import           Network.Riak.Lens
import           Network.Riak.Types

counterUpdate :: [CRDT.CounterOp]
              -> BucketType -> Bucket -> Key
              -> Proto.DtUpdateReq
counterUpdate ops = update (counterUpdateOp ops)

setUpdate :: [CRDT.SetOp]
          -> BucketType -> Bucket -> Key
          -> Proto.DtUpdateReq
setUpdate ops = update (setUpdateOp ops)

mapUpdate :: [CRDT.MapOp]
          -> BucketType -> Bucket -> Key
          -> Proto.DtUpdateReq
mapUpdate ops = update (mapUpdateOp ops)

update :: Proto.DtOp -> BucketType -> Bucket -> Key -> Proto.DtUpdateReq
update op t b k = Proto.defMessage
                    & Proto.bucket .~ b
                    & Proto.key .~ k
                    & Proto.op .~ op
                    & Proto.type' .~ t

get :: ByteString -> ByteString -> ByteString -> Proto.DtFetchReq
get t b k = Proto.defMessage
              & Proto.bucket .~ b
              & Proto.key .~ k
              & Proto.type' .~ t