packages feed

hsec-tools-0.2.0.2: src/Security/Advisories/Generate/TH.hs

module Security.Advisories.Generate.TH ( 
  readFileTH,
  readDirFilesTH,
  fileLocation,
  ) where

import Control.Monad.IO.Class (liftIO)
import Data.ByteString.Char8 as BS8
import Data.FileEmbed (embedDir, makeRelativeToLocationPredicate)
import Language.Haskell.TH (Exp (LitE), Lit (StringL), Q)

-- | Read file at compile-time.
readFileTH :: FilePath -> Q Exp
readFileTH p = fileLocation p $ \p' -> LitE . StringL . BS8.unpack <$> liftIO (BS8.readFile p')

-- | Read files in (sub-)directory at compile-time.
-- Gives a [(FilePath, ByteString)]
readDirFilesTH :: FilePath -> Q Exp
readDirFilesTH p = fileLocation p embedDir

fileLocation :: FilePath -> (FilePath -> Q Exp) -> Q Exp
fileLocation fp act = makeRelativeToLocationPredicate (== "hsec-tools.cabal") fp >>= act