module Network.Riak.Response
(
getClientID
, get
, put
, listBuckets
, getBucket
, unescapeLinks
) where
import Control.Applicative ((<$>))
import Data.Maybe (fromMaybe)
import Network.Riak.Escape (unescape)
import Network.Riak.Protocol.BucketProps
import Network.Riak.Protocol.Content
import Network.Riak.Protocol.GetBucketResponse
import Network.Riak.Protocol.GetClientIDResponse
import Network.Riak.Protocol.GetResponse
import Network.Riak.Protocol.Link
import Network.Riak.Protocol.ListBucketsResponse
import Network.Riak.Protocol.PutResponse
import Network.Riak.Types.Internal hiding (MessageTag(..))
import qualified Data.ByteString.Lazy as L
import qualified Data.Sequence as Seq
getClientID :: GetClientIDResponse -> ClientID
getClientID = client_id
get :: Maybe GetResponse -> Maybe (Seq.Seq Content, VClock)
get (Just (GetResponse content (Just vclock)))
= Just (unescapeLinks <$> content, VClock vclock)
get _ = Nothing
put :: PutResponse -> (Seq.Seq Content, VClock)
put PutResponse{..} = (unescapeLinks <$> content,
VClock (fromMaybe L.empty vclock))
listBuckets :: ListBucketsResponse -> Seq.Seq Bucket
listBuckets = fmap unescape . buckets
getBucket :: GetBucketResponse -> BucketProps
getBucket = props
unescapeLinks :: Content -> Content
unescapeLinks c = c { links = go <$> links c }
where go l = l { bucket = unescape <$> bucket l, key = unescape <$> key l }