interp-1.0.0.0: src/Data/Text/Interp.hs
module Data.Text.Interp
( opts
, doInterp
, Input(..)
) where
import Control.Monad.Except
import Control.Monad.Trans (lift)
import Data.Aeson
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.IO as T
import System.IO (FilePath)
import Text.Megaparsec
import Data.Text.Interp.CLI (Input(..), opts)
import Data.Text.Interp.Interpolate (interp)
import Data.Text.Interp.Parse (itP)
import Data.Text.Interp.Types (I)
-- | Generate interpolated text within a `Data.Text.Interp.Types.I` monad
doInterp :: FilePath -- ^ path to substitutions file
-> FilePath -- ^ path to interpolations file
-> I Text -- ^ resulting interpolated text
doInterp sf tf = do
i <- parse itP "" <$> T.strip <$> (lift $ T.readFile tf)
case i of
(Left e) -> throwError . T.pack $ errorBundlePretty e
(Right i') -> do
s <- lift $ eitherDecodeFileStrict sf
case s of
(Left e) -> throwError $ T.pack e
(Right s') -> interp s' i'