{-# LANGUAGE NoImplicitPrelude #-}
module Headroom.Template
( Template(..)
, loadTemplate
)
where
import Headroom.FileSystem ( loadFile )
import RIO
import qualified RIO.Text as T
class Template t where
templateExtensions :: proxy t
-> NonEmpty Text
parseTemplate :: MonadThrow m
=> Maybe Text
-> Text
-> m t
renderTemplate :: MonadThrow m
=> HashMap Text Text
-> t
-> m Text
loadTemplate :: (MonadIO m, Template t)
=> FilePath
-> m t
loadTemplate :: FilePath -> m t
loadTemplate path :: FilePath
path = do
Text
raw <- FilePath -> m Text
forall (m :: * -> *). MonadIO m => FilePath -> m Text
loadFile FilePath
path
IO t -> m t
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO t -> m t) -> IO t -> m t
forall a b. (a -> b) -> a -> b
$ Maybe Text -> Text -> IO t
forall t (m :: * -> *).
(Template t, MonadThrow m) =>
Maybe Text -> Text -> m t
parseTemplate (Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> Text -> Maybe Text
forall a b. (a -> b) -> a -> b
$ FilePath -> Text
T.pack FilePath
path) Text
raw