module System.AtomicWrite.Writer.ByteStringBuilder (atomicWriteFile) where
import System.AtomicWrite.Internal (closeAndRename, tempFileFor)
import Data.ByteString.Builder (hPutBuilder, Builder, hPutBuilder)
import GHC.IO.Handle (hSetBinaryMode, hSetBuffering, BufferMode (BlockBuffering))
atomicWriteFile ::
FilePath
-> Builder
-> IO ()
atomicWriteFile f builder = do
(temppath, h) <- tempFileFor f
hSetBinaryMode h True
hSetBuffering h (BlockBuffering Nothing)
hPutBuilder h builder
closeAndRename h temppath f