packages feed

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

module Pipeline.Broadcasting.Sink where

import           Conduit
import qualified Data.ByteString.Lazy  as LBS
import           Lib.Logger.Types      (LogLevel (..), MonadLogger (..))
import           Network.ConnectionAPI (WriterAPI (..))

sink :: (MonadLogger m , MonadIO m)
  => WriterAPI writer
  -> writer
  -> ConduitT LBS.ByteString Void m ()
sink writerApi writer = do
  bs <- await
  case bs of
    Nothing -> do
      lift . logMessage Debug $ "no more data to write; stopping sink"
      return ()
    Just bs -> do
      res <- liftIO $ writeDataLazy writerApi writer bs
      case res of
        Left err -> do
          lift . logMessage Error $ ("write failed: " ++ err)
          return ()
        Right () -> sink writerApi writer