packages feed

hnix-store-remote-0.7.0.0: tests-io/DataSink.hs

module DataSink

( DataSink(..)
, dataSinkResult
, dataSinkWriter
, newDataSink
)

where

import Data.ByteString (ByteString)

import Control.Monad.ST
import Data.STRef

-- | Basic data sink for testing
newtype DataSink = DataSink (STRef RealWorld ByteString)

newDataSink :: IO DataSink
newDataSink = DataSink <$> (stToIO . newSTRef) mempty

dataSinkWriter :: DataSink -> (ByteString -> IO())
dataSinkWriter (DataSink stref) chunk = stToIO (modifySTRef stref (chunk <>))

dataSinkResult :: DataSink -> IO ByteString
dataSinkResult (DataSink stref) = (stToIO . readSTRef) stref