module Database.Redis.Set
    ( setAdd
    , setAddB
    , setRemove
    , setRemoveB
    , setContains
    , setContainsB
    , setMembers
    , setMembersB
    , setRandMember
    , setRandMemberB
    ) where


import           System.IO

import           Database.Redis.Internal


------------------------------------------------------------------------------
-- | SADD
setAdd :: Handle
       -> String  -- ^ key
       -> String  -- ^ value
       -> IO (Maybe RedisReply)
setAdd h key value = request h $ map toUTF8 ["SADD", key, value]


-- | SADD
setAddB :: Handle
        -> ByteString  -- ^ key
        -> ByteString  -- ^ value
        -> IO (Maybe RedisReply)
setAddB h key value = request h [toUTF8 "SADD", key, value]


------------------------------------------------------------------------------
-- | SREM
setRemove :: Handle
          -> String  -- ^ key
          -> String  -- ^ value
          -> IO (Maybe RedisReply)
setRemove h key value = request h $ map toUTF8 ["SREM", key, value]


-- | SREM
setRemoveB :: Handle
           -> ByteString  -- ^ key
           -> ByteString  -- ^ value
           -> IO (Maybe RedisReply)
setRemoveB h key value = request h [toUTF8 "SREM", key, value]


-- SPOP
-- SMOVE
-- SCARD


------------------------------------------------------------------------------
-- | SISMEMBER
setContains :: Handle
            -> String  -- ^ key
            -> String  -- ^ value
            -> IO (Maybe RedisReply)
setContains h key value = request h $ map toUTF8 ["SISMEMBER", key, value]


-- | SISMEMBER
setContainsB :: Handle
             -> ByteString  -- ^ key
             -> ByteString  -- ^ value
             -> IO (Maybe RedisReply)
setContainsB h key value = request h [toUTF8 "SISMEMBER", key, value]


-- SINTER
-- SINTERSTORE
-- SUNION
-- SUNIONSTORE
-- SDIFF
-- SDIFFSTORE


------------------------------------------------------------------------------
-- | SMEMBERS
setMembers :: Handle
           -> String -- ^ key
           -> IO (Maybe RedisReply)
setMembers h key = request h $ map toUTF8 ["SMEMBERS", key]


-- | SMEMBERS
setMembersB :: Handle
            -> ByteString -- ^ key
            -> IO (Maybe RedisReply)
setMembersB h key = request h [toUTF8 "SMEMBERS", key]


------------------------------------------------------------------------------
-- | SRANDMEMBER
setRandMember :: Handle
              -> String  -- ^ key
              -> IO (Maybe RedisReply)
setRandMember h key = request h $ map toUTF8 ["SMEMBERS", key]


-- | SRANDMEMBER
setRandMemberB :: Handle
               -> ByteString  -- ^ key
               -> IO (Maybe RedisReply)
setRandMemberB h key = request h [toUTF8 "SMEMBERS", key]