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)
newJetStream :: Nats.Client -> [JetStreamOption] -> Either JetStreamConfigError JetStream
newJetStream :: Client
-> [JetStreamOption] -> Either JetStreamConfigError JetStream
newJetStream Client
client [JetStreamOption]
options = do
JetStreamContext
ctx <- Client
-> [JetStreamOption]
-> Either JetStreamConfigError JetStreamContext
tryNewJetStreamContext Client
client [JetStreamOption]
options
let streamAPI :: StreamAPI
streamAPI = JetStreamContext -> StreamAPI
Stream.streamAPI JetStreamContext
ctx
consumerAPI :: ConsumerAPI
consumerAPI = JetStreamContext -> ConsumerAPI
Consumer.consumerAPI JetStreamContext
ctx
publishAPI :: PublishAPI
publishAPI = JetStreamContext -> PublishAPI
Publish.publishAPI JetStreamContext
ctx
messageAPI :: MessageAPI
messageAPI = JetStreamContext -> ConsumerAPI -> MessageAPI
Message.messageAPI JetStreamContext
ctx ConsumerAPI
consumerAPI
JetStream -> Either JetStreamConfigError JetStream
forall a. a -> Either JetStreamConfigError a
forall (f :: * -> *) a. Applicative f => a -> f a
pure JetStream
{ streams :: StreamAPI
streams = StreamAPI
streamAPI
, consumers :: ConsumerAPI
consumers = ConsumerAPI
consumerAPI
, publisher :: PublishAPI
publisher = PublishAPI
publishAPI
, messages :: MessageAPI
messages = MessageAPI
messageAPI
, management :: ManagementAPI
management = JetStreamContext -> ManagementAPI
Management.managementAPI JetStreamContext
ctx
, keyValues :: KeyValueAPI
keyValues = StreamAPI -> PublishAPI -> MessageAPI -> KeyValueAPI
KeyValue.keyValueAPI StreamAPI
streamAPI PublishAPI
publishAPI MessageAPI
messageAPI
}