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))