natskell-1.2.0.0: 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.KeyValue as KeyValue
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 streamAPI = Stream.streamAPI ctx
consumerAPI = Consumer.consumerAPI ctx
publishAPI = Publish.publishAPI ctx
messageAPI = Message.messageAPI ctx consumerAPI
pure JetStream
{ streams = streamAPI
, consumers = consumerAPI
, publisher = publishAPI
, messages = messageAPI
, management = Management.managementAPI ctx
, keyValues = KeyValue.keyValueAPI streamAPI publishAPI messageAPI
}