-- | Capability record for the JetStream client surface.
module JetStream.API
  (
    JetStream (..)
  , JetStreamApiError (..)
  , JetStreamError (..)
  , StreamName
  , ConsumerName
  , Subject
  , Payload
  , module JetStream.Consumer.API
  , module JetStream.Message.API
  , module JetStream.Publish.API
  , module JetStream.Stream.API
  ) where

import           JetStream.Consumer.API
import           JetStream.Error
    ( JetStreamApiError (..)
    , JetStreamError (..)
    )
import           JetStream.Message.API
import           JetStream.Publish.API
import           JetStream.Stream.API
import           JetStream.Types
    ( ConsumerName
    , Payload
    , StreamName
    , Subject
    )

-- | JetStream capabilities for streams, consumers, publishing, and pull
-- message workflows.
data JetStream = JetStream
                   { JetStream -> StreamAPI
streams   :: StreamAPI
                     -- ^ Manage streams and inspect stream state.
                   , JetStream -> ConsumerAPI
consumers :: ConsumerAPI
                     -- ^ Manage stream consumers.
                   , JetStream -> PublishAPI
publisher :: PublishAPI
                     -- ^ Publish messages to JetStream subjects.
                   , JetStream -> MessageAPI
messages  :: MessageAPI
                   -- ^ Fetch and acknowledge pull-consumer messages.
                   }