flashblast-0.0.4.0: src/FlashBlast/FBFileSystem.hs
{-# LANGUAGE TemplateHaskell #-}
module FlashBlast.FBFileSystem where
import Polysemy
import qualified UnliftIO.Path.Directory as U
import qualified System.IO.Temp as U
import Path
import RIO
import qualified RIO.ByteString as BS
data FBFileSystem m a where
CreateTempDirectory :: FBFileSystem m (Path Abs Dir)
CreateDirectory :: Path b Dir -> FBFileSystem m ()
RemoveDirectory :: Path b Dir -> FBFileSystem m ()
DoesFileExist :: Path b File -> FBFileSystem m Bool
CopyFile :: Path b File -> Path b' File -> FBFileSystem m ()
WriteFileBS :: Path b File -> BS.ByteString -> FBFileSystem m ()
WriteFileUTF8 :: Path b File -> Text -> FBFileSystem m ()
makeSem ''FBFileSystem
interpretFBFileSystem :: Member (Embed IO) effs => Sem (FBFileSystem ': effs) a -> Sem effs a
interpretFBFileSystem = interpret \case
CreateTempDirectory -> do
x <- embed U.getCanonicalTemporaryDirectory
embed $ U.createTempDirectory x "" >>= parseAbsDir
CreateDirectory x -> U.createDirectoryIfMissing True x
RemoveDirectory x -> U.removeDirectoryRecursive x
DoesFileExist x -> U.doesFileExist x
CopyFile x y -> U.copyFile x y
WriteFileBS x y -> BS.writeFile (toFilePath x) y
WriteFileUTF8 x y -> writeFileUtf8 (toFilePath x) y