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 Network.Riak.Protocol.Link as Link
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
, Link.key = unescape <$> Link.key l }