packages feed

natskell-0.0.0.1: internal/Plumbing/Pipeline/Broadcasting.hs

module Pipeline.Broadcasting
  ( broadcastingApi
  ) where

import           Conduit
import           Lib.Logger.Types                  (MonadLogger)
import           Network.ConnectionAPI             (WriterAPI)
import           Pipeline.Broadcasting.API         (BroadcastingAPI (..))
import           Pipeline.Broadcasting.Sink
import           Pipeline.Broadcasting.Source
import           Pipeline.Broadcasting.Transformer
import           Queue.API                         (Queue)

runBroadcasting :: (MonadLogger m , MonadIO m)
  => Int -> Queue -> WriterAPI writer -> writer -> m ()
runBroadcasting bufferLimit q writerApi writer = do
  runConduit $ source q .| transformer bufferLimit .| sink writerApi writer

broadcastingApi :: BroadcastingAPI
broadcastingApi = BroadcastingAPI
  { run = runBroadcasting
  }