packages feed

azure-functions-worker-0.0.0.0: src/Azure/Functions/Internal/Templates.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes       #-}
module Azure.Functions.Internal.Templates
where

import           Control.Monad     (unless)
import           Data.Text         (Text)
import qualified Data.Text.IO      as Text
import           Prelude           hiding (writeFile)
import           System.Directory  (createDirectoryIfMissing, doesFileExist)
import           System.FilePath   (takeDirectory)
import           Text.Glabrous     (Template)
import qualified Text.Glabrous     as Tpl
import           Text.RawString.QQ


workerConfigJson :: Template
workerConfigJson = toTemplate "worker.config.json" [r|
{
  "description": {
    "arguments": [
      "run"
    ],
    "defaultExecutablePath": "{{execPath}}",
    "extensions": [
      ".hs"
    ],
    "language": "haskell"
  }
}
|]

writeFile :: FilePath -> Template -> [(Text, Text)] -> IO ()
writeFile file tpl vars = do
  createDirectoryIfMissing True (takeDirectory file)
  let content = Tpl.process tpl (Tpl.fromList vars)
  Text.writeFile file content

writeFileIfNotExist :: FilePath -> Template -> [(Text, Text)] -> IO ()
writeFileIfNotExist file tpl vars = do
  ok <- doesFileExist file
  unless ok $ writeFile file tpl vars

toTemplate :: String -> Text -> Template
toTemplate name tpl =
  case Tpl.fromText tpl of
    Left err   -> error $ "Unable to create template: " <> name <> ". Error: " <> err
    Right tpl' -> tpl'