packages feed

natskell-1.1.0.0: internal/Policy/Subscription/Types.hs

module Subscription.Types
  ( SubscribeConfig (..)
  , SubscriptionKind (..)
  , SubscriptionMeta (..)
  , isOneShotSubscription
  , isResumableSubscription
  , tracksSubscriptionExpiry
  , PendingLimits (..)
  , defaultPendingLimits
  ) where

import           Data.Time.Clock (NominalDiffTime)
import           Types.Msg       (Subject)

data SubscribeConfig = SubscribeConfig
                         { expiry              :: Maybe NominalDiffTime
                         , subscribeQueueGroup :: Maybe Subject
                         }

data SubscriptionKind = StandardSubscription | OneShotSubscription | RequestReplySubscription
  deriving (Eq, Show)

data SubscriptionMeta = SubscriptionMeta
                          { subject    :: Subject
                          , queueGroup :: Maybe Subject
                          , kind       :: SubscriptionKind
                          }
  deriving (Eq, Show)

isOneShotSubscription :: SubscriptionMeta -> Bool
isOneShotSubscription meta =
  case kind meta of
    StandardSubscription     -> False
    OneShotSubscription      -> True
    RequestReplySubscription -> True

isResumableSubscription :: SubscriptionMeta -> Bool
isResumableSubscription meta = kind meta /= RequestReplySubscription

tracksSubscriptionExpiry :: SubscriptionMeta -> Bool
tracksSubscriptionExpiry meta = kind meta == OneShotSubscription

data PendingLimits = PendingLimits
                       { pendingMessageLimit :: Int
                       , pendingByteLimit    :: Int
                       }
  deriving (Eq, Show)

defaultPendingLimits :: PendingLimits
defaultPendingLimits = PendingLimits
  { pendingMessageLimit = 65536
  , pendingByteLimit = 64 * 1024 * 1024
  }