dhall-secret-0.5.50: src/Dhall/Secret/IO.hs
module Dhall.Secret.IO where
import Control.Lens (set)
import qualified Data.Text as T
import Data.Version (showVersion)
import Data.Void (Void, vacuous)
import Dhall (InputSettings, defaultInputSettings,
evaluateSettings, inputExprWithSettings,
substitutions)
import Dhall.Core (Directory (Directory), Expr (..),
File (File), Import (Import),
ImportHashed (ImportHashed),
ImportMode (Code), ImportType (Remote),
Scheme (HTTPS), URL (URL), freeIn,
makeBinding, normalize, pretty)
import Dhall.Freeze (Intent (Secure), Scope (OnlyRemoteImports),
freezeExpression)
import Dhall.Import (load)
import qualified Dhall.Map
import Dhall.Secret.Type (secretTypes)
import Dhall.Src (Src)
import qualified Paths_dhall_secret as P
version :: String
version = showVersion P.version
inputsetting :: InputSettings
inputsetting = set (evaluateSettings . substitutions ) (Dhall.Map.fromList ([("dhall-secret", secretTypes)])) defaultInputSettings
defineVar :: Expr Src Void -> Expr Src Import
defineVar = Let (makeBinding "dhall-secret" (Embed (Import (ImportHashed Nothing (Remote (URL HTTPS "raw.githubusercontent.com" (File (Directory $ reverse ["jcouyang", "dhall-secret", tag]) "Type.dhall") Nothing Nothing))) Code))) . vacuous
where
tag = if version == "0.1.0.0" then "master" else "v" <> T.pack version
addLetbinding :: Expr Src Void -> IO (Expr Src Import)
addLetbinding x
| freeIn "dhall-secret" x = freezeExpression "." OnlyRemoteImports Secure $ defineVar x
| otherwise = pure $ vacuous $ normalize x
parseExpr :: T.Text -> IO (Expr Src Void)
parseExpr text = inputExprWithSettings inputsetting text >>= addLetbinding >>= load
prettyExpr :: Expr Src Void -> IO T.Text
prettyExpr = fmap pretty . addLetbinding