packages feed

hix-0.7.0: lib/Hix/Data/ProjectFile.hs

module Hix.Data.ProjectFile where

import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Reader (ask)
import qualified Data.Text.IO as Text
import Path (File, Path, Rel, parent, toFilePath, (</>))
import Path.IO (createDirIfMissing)

import qualified Hix.Data.Monad (AppResources (cwd))
import Hix.Data.Monad (AppResources (AppResources), M (M))
import Hix.Error (tryIO)

data ProjectFile =
  ProjectFile {
    path :: Path Rel File,
    content :: Text
  }
  deriving stock (Eq, Show, Generic)

createFile :: ProjectFile -> M ()
createFile f = do
  AppResources {cwd} <- M ask
  let
    file = cwd </> f.path
  M $ lift $ tryIO do
    createDirIfMissing True (parent file)
    Text.writeFile (toFilePath file) f.content