{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Redis.Counter
(
Real.handler,
Internal.Handler,
Settings.Settings (..),
Settings.decoder,
makeApi,
Api,
del,
exists,
expire,
ping,
get,
incr,
incrby,
set,
Internal.query,
Internal.transaction,
Internal.Query,
Internal.Error (..),
Internal.map,
Internal.map2,
Internal.map3,
Internal.sequence,
)
where
import Data.List.NonEmpty (NonEmpty)
import qualified Data.List.NonEmpty as NonEmpty
import qualified Redis.Codec as Codec
import qualified Redis.Internal as Internal
import qualified Redis.Real as Real
import qualified Redis.Settings as Settings
import qualified Prelude
data Api key = Api
{
Api key -> NonEmpty key -> Query Int
del :: NonEmpty key -> Internal.Query Int,
Api key -> key -> Query Bool
exists :: key -> Internal.Query Bool,
Api key -> key -> Int -> Query ()
expire :: key -> Int -> Internal.Query (),
Api key -> Query ()
ping :: Internal.Query (),
Api key -> key -> Query (Maybe Int)
get :: key -> Internal.Query (Maybe Int),
Api key -> key -> Query Int
incr :: key -> Internal.Query Int,
Api key -> key -> Int -> Query Int
incrby :: key -> Int -> Internal.Query Int,
Api key -> key -> Int -> Query ()
set :: key -> Int -> Internal.Query ()
}
makeApi ::
(key -> Text) ->
Api key
makeApi :: (key -> Text) -> Api key
makeApi key -> Text
toKey =
Api :: forall key.
(NonEmpty key -> Query Int)
-> (key -> Query Bool)
-> (key -> Int -> Query ())
-> Query ()
-> (key -> Query (Maybe Int))
-> (key -> Query Int)
-> (key -> Int -> Query Int)
-> (key -> Int -> Query ())
-> Api key
Api
{ del :: NonEmpty key -> Query Int
del = NonEmpty Text -> Query Int
Internal.Del (NonEmpty Text -> Query Int)
-> (NonEmpty key -> NonEmpty Text) -> NonEmpty key -> Query Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
<< (key -> Text) -> NonEmpty key -> NonEmpty Text
forall a b. (a -> b) -> NonEmpty a -> NonEmpty b
NonEmpty.map key -> Text
toKey,
exists :: key -> Query Bool
exists = Text -> Query Bool
Internal.Exists (Text -> Query Bool) -> (key -> Text) -> key -> Query Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
<< key -> Text
toKey,
expire :: key -> Int -> Query ()
expire = \key
key Int
secs -> Text -> Int -> Query ()
Internal.Expire (key -> Text
toKey key
key) Int
secs,
ping :: Query ()
ping = Query Status
Internal.Ping Query Status -> (Query Status -> Query ()) -> Query ()
forall a b. a -> (a -> b) -> b
|> (Status -> ()) -> Query Status -> Query ()
forall (m :: * -> *) a value.
Functor m =>
(a -> value) -> m a -> m value
map (\Status
_ -> ()),
get :: key -> Query (Maybe Int)
get = \key
key ->
Text -> Query (Maybe ByteString)
Internal.Get (key -> Text
toKey key
key)
Query (Maybe ByteString)
-> (Query (Maybe ByteString) -> Query (Maybe Int))
-> Query (Maybe Int)
forall a b. a -> (a -> b) -> b
|> (Maybe ByteString -> Result Error (Maybe Int))
-> Query (Maybe ByteString) -> Query (Maybe Int)
forall a b. (a -> Result Error b) -> Query a -> Query b
Internal.WithResult ((ByteString -> Result Error Int)
-> Maybe ByteString -> Result Error (Maybe Int)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
Prelude.traverse (Codec Int -> ByteString -> Result Error Int
forall a. Codec a -> Decoder a
Codec.codecDecoder Codec Int
forall a. (FromJSON a, ToJSON a) => Codec a
Codec.jsonCodec)),
incr :: key -> Query Int
incr = \key
key -> Text -> Query Int
Internal.Incr (key -> Text
toKey key
key),
incrby :: key -> Int -> Query Int
incrby = \key
key Int
amount -> Text -> Int -> Query Int
Internal.Incrby (key -> Text
toKey key
key) Int
amount,
set :: key -> Int -> Query ()
set = \key
key Int
val -> Text -> ByteString -> Query ()
Internal.Set (key -> Text
toKey key
key) (Codec Int -> Encoder Int
forall a. Codec a -> Encoder a
Codec.codecEncoder Codec Int
forall a. (FromJSON a, ToJSON a) => Codec a
Codec.jsonCodec Int
val)
}