{-|
Module      : Network.Nakadi.Internal.Committer.NoBuffer
Description : Implementation unbuffered Cursor Committing Strategy
Copyright   : (c) Moritz Clasmeier 2018
License     : BSD3
Maintainer  : mtesseract@silverratio.net
Stability   : experimental
Portability : POSIX
-}

{-# LANGUAGE FlexibleContexts      #-}
{-# LANGUAGE MultiParamTypeClasses #-}

module Network.Nakadi.Internal.Committer.NoBuffer where

import           Network.Nakadi.Internal.Prelude

import           Network.Nakadi.Internal.Committer.Shared
import           Network.Nakadi.Internal.Types

import           UnliftIO.STM

-- | Implementation for the 'CommitNoBuffer' strategy: We simply read
-- every cursor and commit it in order.
committerNoBuffer
  :: (MonadNakadi b m, MonadUnliftIO m, MonadMask m)
  => SubscriptionEventStream
  -> TBQueue (Int, SubscriptionCursor)
  -> m ()
committerNoBuffer = unbufferedCommitLoop