packages feed

natskell-0.3.0.0: jetstream/JetStream/Stream/API.hs

module JetStream.Stream.API
  ( StreamAPI (..)
  , RetentionPolicy (..)
  , StorageType (..)
  , DiscardPolicy (..)
  , StreamConfig (..)
  , StreamConfigOption
  , withRetention
  , withStorage
  , withDiscard
  , withMaxMessages
  , withMaxBytes
  , withMaxAge
  , withReplicas
  , withDuplicateWindow
  , withAllowDirect
  , PurgeStreamOption
  , withPurgeSubject
  , withPurgeSequence
  , withPurgeKeep
  , StreamListOption
  , withStreamListOffset
  , withStreamListSubject
  , StreamMessage (..)
  , StreamMessageSelector (..)
  , StreamMessageDeleteMode (..)
  , DeleteStreamMessageResponse (..)
  , StreamInfo (..)
  , StreamState (..)
  , StreamCluster (..)
  , StreamPeer (..)
  , StreamSourceInfo (..)
  , DeleteStreamResponse (..)
  , PurgeStreamResponse (..)
  , StreamListResponse (..)
  , StreamNamesResponse (..)
  ) where

import           JetStream.Error        (JetStreamError)
import           JetStream.Stream.Types
import           JetStream.Types        (StreamName, Subject)

-- | Stream management operations.
data StreamAPI = StreamAPI
                   { create :: StreamName -> [Subject] -> [StreamConfigOption] -> IO (Either JetStreamError StreamInfo)
                     -- ^ Create a stream.
                   , createOrUpdate :: StreamName -> [Subject] -> [StreamConfigOption] -> IO (Either JetStreamError StreamInfo)
                     -- ^ Create a stream or update it if it already exists.
                   , update :: StreamName -> [Subject] -> [StreamConfigOption] -> IO (Either JetStreamError StreamInfo)
                     -- ^ Update an existing stream configuration.
                   , info :: StreamName -> IO (Either JetStreamError StreamInfo)
                     -- ^ Fetch stream configuration and state.
                   , getMessage :: StreamName -> StreamMessageSelector -> IO (Either JetStreamError StreamMessage)
                     -- ^ Fetch a stored stream message by selector.
                   , deleteMessage :: StreamName -> Integer -> StreamMessageDeleteMode -> IO (Either JetStreamError DeleteStreamMessageResponse)
                     -- ^ Delete or securely erase a stored stream message.
                   , delete :: StreamName -> IO (Either JetStreamError DeleteStreamResponse)
                     -- ^ Delete a stream.
                   , purge :: StreamName -> [PurgeStreamOption] -> IO (Either JetStreamError PurgeStreamResponse)
                     -- ^ Purge messages from a stream.
                   , list :: [StreamListOption] -> IO (Either JetStreamError StreamListResponse)
                     -- ^ List streams and their metadata.
                   , names :: [StreamListOption] -> IO (Either JetStreamError StreamNamesResponse)
                   -- ^ List stream names.
                   }