packages feed

natskell-1.0.0.1: jetstream/JetStream/Consumer/API.hs

module JetStream.Consumer.API
  ( ConsumerAPI
  , putConsumer
  , consumerInfo
  , pauseConsumer
  , resumeConsumer
  , resetConsumer
  , deleteConsumer
  , listConsumers
  , consumerNames
  , Consumer
  , consumerStreamName
  , consumerName
  , lookupConsumer
  , putConsumerHandle
  , getConsumerInfo
  , AckPolicy (..)
  , ConsumerAction (..)
  , ConsumerConfig
  , consumerConfigDurableName
  , consumerConfigName
  , consumerConfigDescription
  , consumerConfigDeliverSubject
  , consumerConfigDeliverGroup
  , consumerConfigDeliverPolicy
  , consumerConfigAckPolicy
  , consumerConfigReplayPolicy
  , consumerConfigFilterSubject
  , consumerConfigFilterSubjects
  , consumerConfigAckWait
  , consumerConfigMaxDeliver
  , consumerConfigMaxWaiting
  , consumerConfigMaxAckPending
  , consumerConfigInactiveThreshold
  , consumerConfigIdleHeartbeat
  , consumerConfigHeadersOnly
  , consumerConfigReplicas
  , consumerConfigMemoryStorage
  , ConsumerConfigOption
  , ConsumerFilter (..)
  , ConsumerKind (..)
  , ConsumerInfo
  , consumerInfoStreamName
  , consumerInfoName
  , consumerInfoCreated
  , consumerInfoConfig
  , consumerInfoDelivered
  , consumerInfoAckFloor
  , consumerInfoNumAckPending
  , consumerInfoNumRedelivered
  , consumerInfoNumWaiting
  , consumerInfoNumPending
  , ConsumerListOption
  , ConsumerListResponse
  , consumerListTotal
  , consumerListOffset
  , consumerListLimit
  , consumerListConsumers
  , ConsumerNamesResponse
  , consumerNamesTotal
  , consumerNamesOffset
  , consumerNamesLimit
  , consumerNamesConsumers
  , ConsumerPauseResponse
  , consumerPausePaused
  , consumerPauseUntilTime
  , consumerPauseRemaining
  , ConsumerResetOption
  , ConsumerResetResponse
  , consumerResetInfo
  , consumerResetResponseSequence
  , ConsumerSequenceInfo
  , consumerSequenceConsumer
  , consumerSequenceStream
  , consumerSequenceLast
  , ConsumerTarget (..)
  , DeleteConsumerResponse
  , deleteConsumerSuccess
  , DeliverPolicy (..)
  , ReplayPolicy (..)
  , withConsumerAckPolicy
  , withConsumerAckWait
  , withConsumerDescription
  , withConsumerDeliverGroup
  , withConsumerDeliverPolicy
  , withConsumerFilter
  , withConsumerHeadersOnly
  , withConsumerIdleHeartbeat
  , withConsumerInactiveThreshold
  , withConsumerListOffset
  , withConsumerMaxAckPending
  , withConsumerMaxDeliver
  , withConsumerMaxWaiting
  , withConsumerMemoryStorage
  , withConsumerReplicas
  , withConsumerReplayPolicy
  , withConsumerResetSequence
  ) where

import           JetStream.Consumer.Types
import           JetStream.Error          (JetStreamError)
import           JetStream.Types
    ( ConsumerName
    , JetStreamRequestOption
    , StreamName
    )

lookupConsumer
  :: ConsumerAPI
  -> StreamName
  -> ConsumerName
  -> [JetStreamRequestOption]
  -> IO (Either JetStreamError Consumer)
lookupConsumer api stream name requestOptions =
  fmap (fmap (const (Consumer stream name)))
    (consumerInfo api stream name requestOptions)

putConsumerHandle
  :: ConsumerAPI
  -> StreamName
  -> ConsumerAction
  -> ConsumerTarget
  -> ConsumerKind
  -> [ConsumerConfigOption]
  -> [JetStreamRequestOption]
  -> IO (Either JetStreamError Consumer)
putConsumerHandle api stream action target kind configOptions requestOptions =
  fmap (fmap toHandle)
    (putConsumer api stream action target kind configOptions requestOptions)
  where
    toHandle result = Consumer (consumerInfoStreamName result) (consumerInfoName result)

getConsumerInfo
  :: ConsumerAPI
  -> Consumer
  -> [JetStreamRequestOption]
  -> IO (Either JetStreamError ConsumerInfo)
getConsumerInfo api consumer =
  consumerInfo api (consumerStreamName consumer) (consumerName consumer)