packages feed

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

module Pipeline.Streaming
  ( streamingApi
  ) where

import           Conduit
import           Lib.Logger.Types          (MonadLogger)
import           Network.ConnectionAPI     (ReaderAPI)
import           Parser.API                (ParserAPI)
import           Pipeline.Streaming.API    (StreamingAPI (..))
import           Pipeline.Streaming.Parser
import           Pipeline.Streaming.Sink
import           Pipeline.Streaming.Source

runStreaming :: (MonadLogger m , MonadIO m)
  => Int
  -> ReaderAPI reader
  -> reader
  -> ParserAPI a
  -> (a -> IO ())
  -> m ()
runStreaming bufferLimit readerApi reader parserApi router =
  runConduit $ source readerApi reader .| parser bufferLimit parserApi .| sink router

streamingApi :: StreamingAPI
streamingApi = StreamingAPI
  { run = runStreaming
  }