{-# options_haddock hide #-} module Polysemy.Test.Files where import qualified Data.Text as Text import qualified Data.Text.IO as Text import Path (Abs, Dir, File, Path, Rel, parent, reldir, toFilePath, (</>)) import Path.IO (createDirIfMissing) tempPath :: Path Abs Dir -> Path Rel b -> Path Abs b tempPath :: Path Abs Dir -> Path Rel b -> Path Abs b tempPath Path Abs Dir base Path Rel b path = Path Abs Dir base Path Abs Dir -> Path Rel b -> Path Abs b forall b t. Path b Dir -> Path Rel t -> Path b t </> [reldir|temp|] Path Rel Dir -> Path Rel b -> Path Rel b forall b t. Path b Dir -> Path Rel t -> Path b t </> Path Rel b path tempDir :: Member (Embed IO) r => Path Abs Dir -> Path Rel Dir -> Sem r (Path Abs Dir) tempDir :: Path Abs Dir -> Path Rel Dir -> Sem r (Path Abs Dir) tempDir Path Abs Dir base Path Rel Dir path = do IO () -> Sem r () forall (m :: * -> *) (r :: [(* -> *) -> * -> *]) a. Member (Embed m) r => m a -> Sem r a embed (Bool -> Path Abs Dir -> IO () forall (m :: * -> *) b. MonadIO m => Bool -> Path b Dir -> m () createDirIfMissing @IO Bool True Path Abs Dir fullPath) pure Path Abs Dir fullPath where fullPath :: Path Abs Dir fullPath = Path Abs Dir -> Path Rel Dir -> Path Abs Dir forall b. Path Abs Dir -> Path Rel b -> Path Abs b tempPath Path Abs Dir base Path Rel Dir path readFile :: Member (Embed IO) r => Path Abs File -> Sem r Text readFile :: Path Abs File -> Sem r Text readFile Path Abs File path = IO Text -> Sem r Text forall (m :: * -> *) (r :: [(* -> *) -> * -> *]) a. Member (Embed m) r => m a -> Sem r a embed (FilePath -> IO Text Text.readFile (Path Abs File -> FilePath forall b t. Path b t -> FilePath toFilePath Path Abs File path)) tempFile :: Member (Embed IO) r => Path Abs Dir -> [Text] -> Path Rel File -> Sem r (Path Abs File) tempFile :: Path Abs Dir -> [Text] -> Path Rel File -> Sem r (Path Abs File) tempFile Path Abs Dir base [Text] content Path Rel File path = do Sem r (Path Abs Dir) -> Sem r () forall (f :: * -> *) a. Functor f => f a -> f () void (Path Abs Dir -> Path Rel Dir -> Sem r (Path Abs Dir) forall (r :: [(* -> *) -> * -> *]). Member (Embed IO) r => Path Abs Dir -> Path Rel Dir -> Sem r (Path Abs Dir) tempDir Path Abs Dir base (Path Rel File -> Path Rel Dir forall b t. Path b t -> Path b Dir parent Path Rel File path)) Path Abs File fullPath Path Abs File -> Sem r () -> Sem r (Path Abs File) forall (f :: * -> *) a b. Functor f => a -> f b -> f a <$ IO () -> Sem r () forall (m :: * -> *) (r :: [(* -> *) -> * -> *]) a. Member (Embed m) r => m a -> Sem r a embed (FilePath -> Text -> IO () Text.writeFile (Path Abs File -> FilePath forall b t. Path b t -> FilePath toFilePath Path Abs File fullPath) (Text -> [Text] -> Text Text.intercalate Text "\n" [Text] content)) where fullPath :: Path Abs File fullPath = Path Abs Dir -> Path Rel File -> Path Abs File forall b. Path Abs Dir -> Path Rel b -> Path Abs b tempPath Path Abs Dir base Path Rel File path tempFileContent :: Member (Embed IO) r => Path Abs Dir -> Path Rel File -> Sem r Text tempFileContent :: Path Abs Dir -> Path Rel File -> Sem r Text tempFileContent Path Abs Dir base Path Rel File path = Path Abs File -> Sem r Text forall (r :: [(* -> *) -> * -> *]). Member (Embed IO) r => Path Abs File -> Sem r Text readFile (Path Abs Dir -> Path Rel File -> Path Abs File forall b. Path Abs Dir -> Path Rel b -> Path Abs b tempPath Path Abs Dir base Path Rel File path) fixturePath :: Path Abs Dir -> Path Rel p -> Sem r (Path Abs p) fixturePath :: Path Abs Dir -> Path Rel p -> Sem r (Path Abs p) fixturePath Path Abs Dir base Path Rel p path = do Path Abs p -> Sem r (Path Abs p) forall (m :: * -> *) a. Monad m => a -> m a return (Path Abs p -> Sem r (Path Abs p)) -> Path Abs p -> Sem r (Path Abs p) forall a b. (a -> b) -> a -> b $ Path Abs Dir base Path Abs Dir -> Path Rel p -> Path Abs p forall b t. Path b Dir -> Path Rel t -> Path b t </> [reldir|fixtures|] Path Rel Dir -> Path Rel p -> Path Rel p forall b t. Path b Dir -> Path Rel t -> Path b t </> Path Rel p path fixture :: Member (Embed IO) r => Path Abs Dir -> Path Rel File -> Sem r Text fixture :: Path Abs Dir -> Path Rel File -> Sem r Text fixture Path Abs Dir base Path Rel File subPath = do Path Abs File -> Sem r Text forall (r :: [(* -> *) -> * -> *]). Member (Embed IO) r => Path Abs File -> Sem r Text readFile (Path Abs File -> Sem r Text) -> Sem r (Path Abs File) -> Sem r Text forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< Path Abs Dir -> Path Rel File -> Sem r (Path Abs File) forall p (r :: [(* -> *) -> * -> *]). Path Abs Dir -> Path Rel p -> Sem r (Path Abs p) fixturePath Path Abs Dir base Path Rel File subPath