packages feed

natskell-1.0.0.1: client/JetStream/Client.hs

-- | High-level client implementation for JetStream.
module JetStream.Client
  ( newJetStream
  , JetStream
  , JetStreamOption
  , JetStreamRequestOption
  , JetStreamConfigError (..)
  , withDomain
  , withRequestTimeout
  , withRequestTimeoutMicros
  ) where

import qualified API                  as Nats
import           JetStream.API        (JetStream)
import qualified JetStream.Consumer   as Consumer
import qualified JetStream.Management as Management
import qualified JetStream.Message    as Message
import           JetStream.Options
    ( JetStream (..)
    , JetStreamConfigError (..)
    , JetStreamOption
    , tryNewJetStreamContext
    , withDomain
    , withRequestTimeout
    , withRequestTimeoutMicros
    )
import qualified JetStream.Publish    as Publish
import qualified JetStream.Stream     as Stream
import           JetStream.Types      (JetStreamRequestOption)

-- | Build JetStream capabilities from an existing NATS client.
newJetStream :: Nats.Client -> [JetStreamOption] -> Either JetStreamConfigError JetStream
newJetStream client options = do
  ctx <- tryNewJetStreamContext client options
  let consumerAPI = Consumer.consumerAPI ctx
  pure JetStream
    { streams = Stream.streamAPI ctx
    , consumers = consumerAPI
    , publisher = Publish.publishAPI ctx
    , messages = Message.messageAPI ctx consumerAPI
    , management = Management.managementAPI ctx
    }