module Unison.Cli.DirectoryUtils
  ( makeMakeTempFilename,
  )
where

import Data.Text qualified as Text
import System.Directory (canonicalizePath, getTemporaryDirectory)
import System.FilePath ((</>))
import System.IO.Temp qualified as Temporary
import Text.Builder qualified
import Text.Builder qualified as Text (Builder)
import Unison.Prelude

makeMakeTempFilename :: (MonadIO m) => m (Text.Builder -> Text)
makeMakeTempFilename :: forall (m :: * -> *). MonadIO m => m (Builder -> Text)
makeMakeTempFilename =
  IO (Builder -> Text) -> m (Builder -> Text)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO do
    FilePath
tmpdir0 <- IO FilePath
getTemporaryDirectory
    FilePath
tmpdir1 <- FilePath -> IO FilePath
canonicalizePath FilePath
tmpdir0
    FilePath
tmpdir2 <- FilePath -> FilePath -> IO FilePath
Temporary.createTempDirectory FilePath
tmpdir1 FilePath
"unison"
    (Builder -> Text) -> IO (Builder -> Text)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure \Builder
filename -> FilePath -> Text
Text.pack (FilePath
tmpdir2 FilePath -> FilePath -> FilePath
</> Text -> FilePath
Text.unpack (Builder -> Text
Text.Builder.run Builder
filename))