module System.AtomicWrite.Writer.ByteStringBuilder (atomicWriteFile, atomicWriteFileWithMode) where
import System.AtomicWrite.Internal (closeAndRename, maybeSetFileMode,
tempFileFor)
import Data.ByteString.Builder (Builder, hPutBuilder)
import GHC.IO.Handle (BufferMode (BlockBuffering),
hSetBinaryMode, hSetBuffering)
import System.Posix.Types (FileMode)
atomicWriteFile ::
FilePath
-> Builder
-> IO ()
atomicWriteFile :: FilePath -> Builder -> IO ()
atomicWriteFile =
Maybe FileMode -> FilePath -> Builder -> IO ()
atomicWriteFileMaybeMode Maybe FileMode
forall a. Maybe a
Nothing
atomicWriteFileWithMode ::
FileMode
-> FilePath
-> Builder
-> IO ()
atomicWriteFileWithMode :: FileMode -> FilePath -> Builder -> IO ()
atomicWriteFileWithMode FileMode
mode =
Maybe FileMode -> FilePath -> Builder -> IO ()
atomicWriteFileMaybeMode (Maybe FileMode -> FilePath -> Builder -> IO ())
-> Maybe FileMode -> FilePath -> Builder -> IO ()
forall a b. (a -> b) -> a -> b
$ FileMode -> Maybe FileMode
forall a. a -> Maybe a
Just FileMode
mode
atomicWriteFileMaybeMode ::
Maybe FileMode
-> FilePath
-> Builder
-> IO ()
atomicWriteFileMaybeMode :: Maybe FileMode -> FilePath -> Builder -> IO ()
atomicWriteFileMaybeMode Maybe FileMode
mmode FilePath
path Builder
builder = do
(FilePath
temppath, Handle
h) <- FilePath -> IO (FilePath, Handle)
tempFileFor FilePath
path
Handle -> Bool -> IO ()
hSetBinaryMode Handle
h Bool
True
Handle -> BufferMode -> IO ()
hSetBuffering Handle
h (Maybe Int -> BufferMode
BlockBuffering Maybe Int
forall a. Maybe a
Nothing)
Handle -> Builder -> IO ()
hPutBuilder Handle
h Builder
builder
Handle -> FilePath -> FilePath -> IO ()
closeAndRename Handle
h FilePath
temppath FilePath
path
FilePath -> Maybe FileMode -> IO ()
maybeSetFileMode FilePath
path Maybe FileMode
mmode